为什么构造函数返回一个空向量?
我正在为我的大学 CS 课程做一个年终项目,但我已经被这个功能困了好几天了,我一直没能得到太多帮助,我的时间开始用完了。你能帮我解决这个问题吗?
hpp 中的函数定义包含一个构造函数:
class Grille {
vector<vector<Place>> grille;
public:
//Constructor
Grille();
构造函数是这样实现的:
Grille::Grille() {
vector<vector<Place>> grille(20);
vector<Place> vp(20);
for(int i=0;i<20;i++) {
for(int j=0;j<20;j++) {vp[j] = Place{Coord{i+1,j+1}};}
grille[i] = vp;
//cout << grille[i].size() << endl;
}
}
这是 Grille 的 << 运算符(它是一个蚂蚁模拟,因此需要使用某些属性来可视化网格):
ostream& operator<<(ostream& out, Grille& g) {
for(int i=0;i<20;i++) {
for(int j=0;j<20;j++) {
char o = '.';
if(g.grille[i][j].contientNid()) {o = 'N';}
else if(g.grille[i][j].contientSucre()) {o = 'S';}
else if(g.grille[i][j].numeroFourmi() != 1) {o = 'f';}
out << o;
}
out << endl;
}
out << endl;
return out;
}
这是我使用的测试工具(它是 Doctest,虽然我主要将它用作主要功能):
TEST_SUITE_BEGIN("Grille");
TEST_CASE("Testing Grille") {
Grille g = Grille();
cout << g.getGrilleSize() << endl;
cout << 't' << endl;
cout << g;
}
TEST_SUITE_END;
构造函数中的格栅大小(第 8 行注释 cout)正确为 20,但构造函数后的大小(测试对象中的 cout,第 4 行)显示为 0。我做错了什么?
回答
构造函数声明了一个局部变量vector<vector<Place>> grille(20);,该变量隐藏(隐藏)了成员变量vector<vector<Place>> grille;。
您应该删除局部变量,而是grille通过构造函数的成员初始化列表来初始化成员变量。
Grille::Grille() : grille(20) {
vector<Place> vp(20);
for(int i=0;i<20;i++) {
for(int j=0;j<20;j++) {vp[j] = Place{Coord{i+1,j+1}};}
grille[i] = vp;
//cout << grille[i].size() << endl;
}
}