提问人:Cramano 提问时间:12/27/2022 最后编辑:Remy LebeauCramano 更新时间:12/27/2022 访问量:218
错误:对“(std::ofstream {aka std::basic_ofstream<char>})的调用不匹配
error: no match for call to '(std::ofstream {aka std::basic_ofstream<char>})
问:
我构建了此代码来输出一个二进制文件,其中包含用于多路复用 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!...";
}
答:
1赞
Cramano
12/27/2022
#1
我想通了,事实证明我有 90% 在那里,我不得不对工作原理做一些研究,但我所需要的只是一些我错过的插入操作数并调整命令语法:std::ostream
ofstream
#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::ofstream
operator<<
ofstream::write()
评论
fout1(value + 0, digits[(value / 1) % 16]);
-- 你能简要引用你的C++教科书中的片段吗,它让你相信这是使用A来完成你想在这里做的事情的正确方法?std::ofstream
std::ostream
std::ostream