在名为maze.hpp(头文件)的文件中,我有以下内容:
class Maze
{
public:
Maze(int size);
~Maze() {}
void step();
private:
int exitRow;
};
在另一个名为maze.cpp的文件中,我有以下内容:
void step(){
this.exitRow = 3;
}
int main(){
Maze maze(4);
maze.step();
}
这会出错:invalid use of 'this' outside of a non-static member function
step是Maze
的成员函数。如何从其中一个成员函数中访问Maze
实例的数据成员?
答案 0 :(得分:3)
当您在类声明之外定义函数时,您需要提供如下的类名:
void Maze::step(){
exitRow = 3;
}
编译器无法知道您定义的方法所属的位置。
请注意,在引用成员函数中的成员时,无需使用this
。 this
仍然可用,从技术上讲,以下内容有效:this->exitRow = 3;
,但不必要。此外,this
是一个指针(因此使用运算符->
而不是.
)。
答案 1 :(得分:3)
行
void step(){
this.exitRow = 3;
}
定义全局函数,而不是Maze
的成员函数。此外,this.exitRow
语法错误。你需要:
void Maze::step(){
this->exitRow = 3;
}
答案 2 :(得分:2)
您的功能定义应为:
void Maze::step()
{
}
现在的方式,它只是定义了一个不属于任何类别的独立功能
此外,this
是一个指针,因此您需要通过使用->
取消引用来访问成员。值得注意的是,您不需要使用this->exitRow
来引用exitRow
,只需在成员函数中提及exitRow
就可以达到同样的目的。