我试图写一个文件,但我收到一个错误,我认为是因为我需要重载我的插入操作符。这就是我到目前为止所拥有的
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct color
{
unsigned char r;
unsigned char g;
unsigned char b;
};
void initialize(color arr[][600], int nrows, int ncols);
void writeAll(color arr[][600], int nrows, int ncols);
const int NROWS = 400;
const int NCOLS = 600;
int main()
{
color arr[400][600];
initialize(arr, 400, 600);
writeAll(arr, 400, 600);
return 0;
}
// Background
void initialize(color arr[][NCOLS], int nrows, int ncols)
{
for (int row = 0; row < NROWS / 2; row++)
{
for (int col = 0; col < NCOLS / 2; col++)
{
arr[row][col].r = 255;
arr[row][col].g = 255;
arr[row][col].b = 255;
}
}
}
void writeAll(color arr[][600], int nrows, int ncols)
{
ofstream fout("out.ppm", ios::out | ios::binary);
fout << "P6" << endl;
fout << ncols << " " << nrows << endl;
fout << 255 << endl;
for (int row = 0; row < nrows; row++)
{
for (int col = 0; col < ncols; col++)
{
fout << arr[row][col];
}
}
fout.close();
}
该行
fout << arr[row][col];
给我一个错误&#34;没有操作员&#34;&lt;&lt;&#;匹配这些操作数
从我已经完成的研究看来,似乎我必须重载该操作数,但我找不到任何关于重载不属于类的内容。
答案 0 :(得分:0)
就像它是一个班级一样。例如,这是一种可能的实现方式:
ofstream& operator<<(ofstream& os, const color& c)
{
os << c.r << '\t' << c.g << '\t' << c.b;
return os;
}
有效。只需根据您的需要调整os <<....
即可。
答案 1 :(得分:0)
在C ++中,struct
和class
都声明了类。唯一的区别是默认情况下它们的成员是公共的还是私有的(模数编译器错误。我 发现了嵌套枚举类成员的一个讨厌的情况(尽管使用了{{1}关键字!)一次)。
也就是说,完全有可能重载运算符,其中一些参数是非类型类型(空指针,指针,任何类型的引用,联合,代数,成员指针,成员函数指针;它是不可能的有一个函数,数组或void类型的参数,但它可以有指针或引用它们(除了对void的引用)),事实上你将重载它作为引用,而不是类,无论如何。唯一的规则是至少有一个参数(包括成员的隐式class
参数)必须在某处包含用户定义的类型(在本例中,在引用下)。
您需要的签名是
this
如果你需要访问你的私有条件(在这种情况下你没有私有条件),这需要在类外部实现,或者在类内部实现{<1}}