错误:对“(std::ofstream {aka std::basic_ofstream<char>})的调用不匹配

error: no match for call to '(std::ofstream {aka std::basic_ofstream<char>})

提问人:Cramano 提问时间:12/27/2022 最后编辑:Remy LebeauCramano 更新时间:12/27/2022 访问量:218

问:

我构建了此代码来输出一个二进制文件,其中包含用于多路复用 7 段显示的查找表。

我对编码很陌生,但正在学习。我想我已经很接近了,但我不确定我缺少什么来使这段代码正常运行。

我在每个循环中都收到以下错误:

错误:对 '(std::ofstream {aka std::basic_ofstream<char>}) (uint32_t, int8_t&) 的调用不匹配

#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

uint32_t value = 0;

int main()
{
    //Program data bytes

    cout << "Writing Binary File2";

    int8_t digits[] = {0X3f, 0X06, 0X5b, 0X4f, 0X66, 0X6d, 0X7d, 0X07, 0X7f, 0X6f, 0X77, 0X7c, 0X39, 0X5e, 0X79, 0X71 }; // 7-segment display output bytes for hexidecimal


    std::ofstream fout1("HexDisplay.bin", fout1.binary|fout1.out);

    if (!fout1) {
        std::cerr << "Error opening output files.\n";
        return 1;
    }

    for (value = 0; value <= 65535; value +=1){
        fout1(value + 0, digits[(value / 1) % 16]);
    }
    cout <<("OnesDone!..."); //

    for (value = 0; value <= 65535; value +=1){
        fout1(value + 65536, digits[(value / 16) % 16]);
    }
    cout <<("TensDone!...");

    for (value = 0; value <= 65535; value +=1){
         fout1(value + 131072, digits[(value / 256) % 16]);
    }
    cout <<("HundredsDone!...");

    for (value = 0; value <= 65535; value +=1){
        fout1(value + 196608, digits[(value / 4096) % 16]);
    }
    cout <<("ThousandsDone!...");

    fout1.write((char*)&fout1, 1);

    cout << "Programming Complete!...";
}
C++ 二进制文件 IOSTREAM ofstream

评论

0赞 Sam Varshavchik 12/27/2022
fout1(value + 0, digits[(value / 1) % 16]);-- 你能简要引用你的C++教科书中的片段吗,它让你相信这是使用A来完成你想在这里做的事情的正确方法?std::ofstream
0赞 Cramano 12/27/2022
我知道我从Arduino项目和许多在线教程中学到的编码,这些代码主要来自Arduino eeprom程序员项目,以及我用来输出另一个二进制文件的一小部分代码。我试图解释并将它们转置到这种布局中
0赞 Sam Varshavchik 12/27/2022
这不是如何使用,没有教程会真正显示这种性质的东西,你一定是误解或误读了某些东西。目前尚不清楚这应该完成什么。如果你不确定如何在C++中做一些基本的事情,比如这样,那么一本好的C++教科书将是一个很好的资源。不幸的是,Stackoverflow 并不能真正作为教科书的替代品(我们在这里只回答具体、详细的问题),而且 C++ 太复杂了,无法通过阅读其他程序来学习,请尝试获得一本好的 C++ 教科书来学习如何使用。std::ostreamstd::ostream
0赞 Paul Sanders 12/27/2022
我知道我从Arduino项目和许多在线教程中学到的编码这不是学习语言的好方法。这里有一些灵感。

答:

1赞 Cramano 12/27/2022 #1

我想通了,事实证明我有 90% 在那里,我不得不对工作原理做一些研究,但我所需要的只是一些我错过的插入操作数并调整命令语法:std::ostreamofstream

#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

uint32_t value = 0;
uint8_t bytes[8][262144] = {0x00};

int main()
{
    //Program data bytes
    cout <<"Writing Binary File2";

    int8_t digits[] = {0X3f, 0X06, 0X5b, 0X4f, 0X66, 0X6d, 0X7d, 0X07, 0X7f, 0X6f, 0X77, 0X7c, 0X39, 0X5e, 0X79, 0X71 }; // 7-segment display output bytes for hexidecimal

    std::ofstream fout1("HexDisplay.bin");

    if (!fout1) {
        std::cerr << "Error opening output files.\n";
        return 1;
    }

    for (value = 0; value <= 65535; value +=1) {
        fout1 <<(value + 0, digits[(value / 1) % 16]);
    }
    cout <<("OnesDone!..."); //


    for (value = 0; value <= 65535; value +=1) {
        fout1 <<(value + 65536, digits[(value / 16) % 16]);
    }
    cout <<("TensDone!...");

    for (value = 0; value <= 65535; value +=1) {
        fout1 <<(value + 131072, digits[(value / 256) % 16]);
    }
    cout <<("HundredsDone!...");

    for (value = 0; value <= 65535; value +=1) {
        fout1 <<(value + 196608, digits[(value / 4096) % 16]);
    }
    cout <<("ThousandsDone!...");

    cout <<("Programming Complete!...");
}

完美无缺! 感谢您对新手的所有谦虚建议。

评论

2赞 Remy Lebeau 12/27/2022
你对 on 的使用并没有达到你认为的作用,因为 1) 你对逗号运算符的使用妨碍了你,2) 写入格式化的输出,而不是二进制输出。也许你是想用?operator<<std::ofstreamoperator<<ofstream::write()