我试图从文件中读取两个值,并将它们存储在名为God
的类中。 God
有两个数据成员,name
和mythology
。我希望将这些值存储在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/