【问题标题】:C++ error A nonstatic member reference must be relative to a specific objectC ++错误非静态成员引用必须相对于特定对象
【发布时间】:2018-05-20 20:38:48
【问题描述】:

我试图在一个对象上调用一个函数,但我得到了这个错误。我有两个课:数独课和拼图课。 Sudoku 类继承了 Puzzle 类。 Sudoku 类具有受保护的变量,一个 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();
    }
}

【问题讨论】:

标签: c++ static


【解决方案1】:

createLibraries 不能定义为静态的。

【讨论】:

  • 这修复了它。谢谢!为什么不能将 createLibraries 定义为静态?
  • 因为libraryOfPuzzles 是一个非静态成员变量,所以要访问它,您需要一个有效的this 指针,而静态方法没有。来自编译器的错误消息可能不那么神秘,但这是非常基本的东西。
【解决方案2】:

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

希望这会有所帮助。

【讨论】:

  • 我把它改成了公开的,但同样的问题。
猜你喜欢
  • 2013-03-19
  • 2015-06-01
  • 2018-03-26
  • 2016-08-13
  • 2021-05-30
  • 1970-01-01
  • 2018-10-23
相关资源
最近更新 更多