2012-04-20 95 views
-1

我一直在试图超载>><<运营商在C++中,我不断收到:C++重载>>和<<运营商

Error 2 error LNK2019: unresolved external symbol "class std::basic_istream<char,struct std::char_traits<char> > & __cdecl operator>>(class std::basic_istream<char,struct std::char_traits<char> > &,class ArrayStorage &)" ([email protected][email protected][email protected]@[email protected]@@[email protected]@[email protected]@@@Z) referenced in function _main G:\Desktop\ACW\08227_ACW2_TestHarnessSolution\main.obj 

我做它的方式是:

//.h file 
friend ostream& operator<<(ostream &sout, ArrayStorage &Astor); 
friend istream& operator>>(istream &sin, ArrayStorage &Astor); 

//cpp file 
ofstream& operator<< (ofstream &sout, ArrayStorage &astor) 
{ 
    astor.write(sout); 
    return sout; 
} 

ifstream& operator>> (ifstream &sin, ArrayStorage &astor) 
{ 
    astor.read(sin); 
    return sin; 
} 

我的一位朋友告诉我要将头文件中声明的“朋友”从头文件中移出,并将其移到课程外,但我仍然得到相同的错误。这可能很简单,但我无法弄清楚什么不起作用。

+0

与原始问题无关,但我通常会期望'''采取对该类型的const引用。 – 2012-04-20 13:35:44

回答

7

您的声明有参数和返回类型istreamostream;但定义有ifstreamofstream

从定义中删除f,并且所有都应该没问题。

friend声明很好,因为它们是(假设它们在类定义中);他们在周围的名字空间中声明函数。但是,如果readwrite是公开的,那么您可能会考虑放弃它们,因为在这种情况下它们不需要特权访问。

+0

非常感谢,我所要做的就是将它们全部改为相同的东西,它的工作原理。谢谢! – 2012-04-20 13:09:54