无法在Qt中调用静态方法
Can't call a static method in Qt
>我有一个简单的类,其中包含一个静态属性。此类中有两个静态方法:一个用于获取静态属性,另一个用于初始化它。然而,当调用静态方法时,编译器会报告错误。
班级:
class Sudoku {
Cell Grid[9][9];
int CurrentLine;
int CurrentColumn;
void deleteValInColumn(int val, int col);
void deleteValInRow(int val, int row);
void deleteValInBox(int val, int x, int y);
static int unsetted; //!
public:
static void IniUnsetted() { //!
unsetted = 0;
}
static int GetUns() { //!
return unsetted;
}
Sudoku(ini InitGrid[9][9]);
void Calculate_Prob_Values();
Cell getCell(int x, int y);
QVector<int> getPossibleValues(int x, int y);
bool SolveIt();
};
这是我得到的错误:
In member function 'bool Sudoku::SolveIt()':
no return statement in function returning non-void [-Wreturn-type]
In function `ZN6Sudoku6GetUnsEv':
undefined reference to `Sudoku::unsetted` error: ld returned 1 exit status
您需要定义静态变量,即使它没有显式初始化。这就是您的代码中缺少的内容。您应该提供一个简单的示例来重现该问题,但为了您的方便,我提供了一个有效的示例。
主.cpp
class Foo {
public:
static int si;
static void bar();
};
int Foo::si = 0; // By default, it will be initialized to zero though.
void Foo::bar() {
Foo::si = 10;
};
int main()
{
Foo::bar();
return 0;
}
注意:我建议找人审查你的代码,因为"未设置"是不正确的英语。如果我们在做这件事,您可能还需要修复缩进。
在你的代码中没有unsetted
的定义,只有声明。
解决方案是在 cpp 文件中的某个位置放置一行,如下所示:
int Sudoku::unsetted
这样做的原因是Sudoku
类的每个实例化都将使用相同的unsetted
成员,因此无法为每个成员定义它,因此程序员只能在一个地方定义它。
在 cpp 文件中,定义静态变量(最好使用初始化):
int Sudoku::unsetted = 0;
如果要在类中声明任何静态变量,则还应在类外部定义该变量。
例:
class A
{
public:
static int x; // declaration
};
int A::x; // definition
相关文章:
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 如何通过命名空间调用非静态方法
- 调用从模板派生的类的静态方法,而不指定模板
- 如何在 c++ 中异步调用静态方法?
- 从另一个标头中的标头调用静态方法
- LNK2019 在文件中调用静态成员的方法时出错.cpp
- 调用静态方法,收到错误:LNK2019
- 从线程内的对象调用静态方法
- C 调用静态方法
- 从指向实例的指针调用静态方法时出现链接错误
- JNI调用静态方法.类对象是必需的吗
- 正在构造函数中调用静态方法
- 无法在Qt中调用静态方法
- 通过重复对象名称来调用静态方法
- 在最终类中调用静态方法的静态基构造函数的设计模式
- 从C调用静态C++方法在编译时会给出未定义的引用
- 在全局范围内调用静态方法
- 是否可以获得调用静态方法的类
- 在模板类中实现和调用静态方法
- 确保在main()之前调用静态方法