我试图从文件中读取两个值,并将它们存储在名为God的类中。 God有两个数据成员,namemythology。我希望将这些值存储在list<God>(上帝及其各自的神话)中,然后将其打印出来。到目前为止,这是我的代码:

#include <iostream>
#include <fstream>
#include <list>
#include <string>

using namespace std;

class God {
    string name;
    string mythology;
public:
    God(string& a, string& b) {
        name=a;
        mythology =b;
    }
    friend ostream&  operator<<( ostream& os,const God&);
};

void read_gods(list<God>& s) {
    string gname, gmyth;

    //reading values from file
    ifstream inFile;
    inFile.open("gods.txt");

    while(!inFile.eof()) {
        inFile >> gname >> gmyth ;
        s.push_back(God(gname, gmyth));
    }
}

ostream& operator<<( ostream& os,const God& god) {
    return  os << god.name << god.mythology;
}

int main() {
    //container:
    list<God> Godmyth;
    read_gods(Godmyth);

    cout << Godmyth;

    return 0;
}


例如,如果我用宙斯(希腊文)阅读,那么我将如何访问它们?

我收到的错误是:


  错误:cannot bind 'std::ostream {aka std::basic_ostream<char>}' lvalue to 'std::basic_ostream<char>&&'|

最佳答案

您应该为输出其数据成员的God类编写operator <<或某些成员函数。

例如

class God
{
public:
   std::ostream & out( std::ostream &os ) const
   {
      return os << name << ": " << mythology;
   }

   //...
};


要么

class God
{
public:
   friend std::ostream & operator <<( std::ostream &, const God & );

   //...
};


std::ostream & operator <<( std::ostream &os, const God &god )
{
    return os << god.name << ": " << god.mythology;
}


在这种情况下,代替无效的声明

cout << Godmyth << endl;


你可以写

for ( const God &god : Godmyth ) std::cout << god << std::endl;


或者,如果您只想访问数据成员,则应编写getter。

例如

class God
{
public:
    std::string GetName() const { return name; }
    std::string GetMythology() const { return mythology; }
    //...

关于c++ - 将值存储在容器中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25837497/

10-10 12:51