尝试使用ostream保存文件内容时出错

问题描述 投票:0回答:1

我用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;
}
c++ operator-overloading fstream cout ostream
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.