为什么构造函数返回一个空向量?

我正在为我的大学 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;
    }
}


以上是为什么构造函数返回一个空向量?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>