【发布时间】:2013-01-30 18:03:00
【问题描述】:
我必须重载移位运算符“
我在 ostream 重载方面做得很好,而我在重载 fstream 时遇到了一些问题,这里是:
在我的标题中:
friend ostream &operator<<(ostream &, const Fotografia &);
friend fstream &operator<<(fstream &, const Fotografia &);
在我的 cpp 文件中:
fstream &operator<<(fstream & miofile, const Fotografia & sorgente)
{
//Open the file
miofile.open("data.dat", ios::binary | ios::app);
if(!miofile) cerr << "Can't open the file\n";
miofile << strlen(sorgente.Titolo);
miofile << endl;
miofile << sorgente.Titolo;
//I close the file
miofile.close();
return miofile;
}
这是我面临的错误:
在函数`std::fstream& operator
ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char, _Traits>&, const char*) [with _Traits = std::char_traits<char>]
std::fstream& operator<<(std::fstream&, const Fotografia&)
到目前为止,我所理解的是,我刚刚创建的重载函数与标准 fstream
我认为我可以通过使用“::”范围调用 fstream 运算符来解决这个问题,但我不确定。
有人可以帮我吗? :)
编辑:
我正在发布标题的代码和构造函数的代码
//Costruttore,distruttore,costruttore di copia,operatore di assegnazione.
Fotografia(char * titolo = "Untitled" , char * formato = ".jpeg");
~Fotografia() { delete [] Titolo; delete [] Formato;}
Fotografia(const Fotografia &);
Fotografia &operator=(const Fotografia &);
这是在 cpp 中:
Fotografia::Fotografia(char * titolo , char * formato)
{
Titolo = new char[strlen(titolo)+1];
strcpy(Titolo,titolo);
Formato = new char[strlen(formato)+1];
strcpy(Formato,formato);
} //Fine costruttore
【问题讨论】:
-
一个
fstream是一个ostream。 -
传递给
operator<<的fstream不应该被调用者打开和关闭吗?因为它将它传入和传出函数是毫无意义的。关于您的问题:char*和Fotografia(operator char*或Fotografia(const char*))之间是否有任何隐式转换?
标签: c++ ambiguous ambiguous-call