C ++错误非静态成员引用必须与特定对象相关

时间:2018-05-20 20:38:49

标签: c++ static

我试图在一个对象上调用一个函数,但是我收到了这个错误。我有两个类:Sudoku类和Puzzle类。 Sudoku类继承了Puzzle类。 Sudoku类有保护变量,一个Puzzle对象的2D数组Puzzle libraryOfPuzzles[4][10];当我尝试在libraryOfPuzzles[][];上调用setSolution函数时,它不起作用。但是,当我在函数本身内部创建的Puzzle test[4][10];上调用它时,它可以工作。为什么是这样?

void Sudoku::createLibraries(string name) {
    Puzzle test[4][10]; //added for demonstration purposes
    string fileName = "";
    int i = 0;
    for (int k = 0; k < 40; k++) {
        fileName = name + to_string(k) + ".txt";
        string aWord;
        ifstream fin;
        fin.open(fileName);
        i = 0;
        int value = 0;
        while (!fin.eof()) {
            fin >> aWord;
            int value = stringToInt(aWord);
            libraryOfPuzzles[k / 10][k % 10].setSolution(i / 9, i % 9, value); //this line gives error
            test[k / 10][k % 10].setSolution(i / 9, i % 9, value); //this line is fine
            i++;
        }
    fin.close();
    }
}

2 个答案:

答案 0 :(得分:0)

createLibraries不能定义为静态。

答案 1 :(得分:0)

我认为你的问题是你的数组不公开。所以libraryOfPuzzles [] [];无法访问它,但益智测试[4] [10];可以。

希望这会有所帮助。