我用C ++编写了一个程序,并使用gcc 7.3编译它。这是一个将字符串写入文件的简单程序。但只有在使用gcc 7.3进行编译时才会生成编译器错误。使用旧的编译器4.8.5,程序被成功编译。
编译器错误如下
在成员函数'void CDemoMap :: saveFile(std :: __ cxx11 :: string&)':.. \ src \ VerifyProgram.cpp:51:9:错误:不匹配'operator <<'(操作数类型是'std: :ostream {aka std :: basic_ostream}'和'std :: ostream {aka std :: basic_ostream}')cout << print(coutFile)
有谁能帮我解决这个问题?代码如下
#include <map>
#include <iostream>
#include <ostream>
#include <fstream>
using namespace std;
class CDemoMap
{
public:
map<int,int> m_sMap;
void saveFile(std::string &);
std::ostream& print(std::ostream &s);
};
std::ostream& operator << (ostream& s, const CDemoMap &m)
{
if (m.m_sMap.size())
{
s << "-----------------\nSOCKET FQDN MAP\n-----------------\n";
s << "fqdn host:port timestamp\n";
for (map<int,int>::const_iterator iter = m.m_sMap.cbegin(); iter !=
m.m_sMap.cend(); ++iter)
{
s << iter->first << " " << (iter->second);
}
s << endl;
}
return s;
}
std::ostream& CDemoMap::print(std::ostream &s)
{
return s << (*this);
}
void CDemoMap::saveFile(std::string & test)
{
char outFile[50];
snprintf(outFile, sizeof(outFile), "Data:%s", test.c_str());
std::ofstream coutFile;
coutFile.open("Test.txt", std::ios::app);
cout << print(coutFile);
coutFile.close();
}
int main() {
CDemoMap cSocket;
string str = "Hello";
cSocket.saveFile(str);
cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
return 0;
}