从成员函数中访问私有数据成员

时间:2015-02-02 06:07:46

标签: c++ scope private member

在名为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实例的数据成员?

3 个答案:

答案 0 :(得分:3)

当您在类声明之外定义函数时,您需要提供如下的类名:

void Maze::step(){

    exitRow = 3;

}

编译器无法知道您定义的方法所属的位置。

请注意,在引用成员函数中的成员时,无需使用thisthis仍然可用,从技术上讲,以下内容有效: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就可以达到同样的目的。