为什么我不能在C ++中访问我的私有变量和getter和setter消息

时间:2011-08-29 19:34:11

标签: c++

我被一遍又一遍地告诉我要保持我的类变量是私有的,因为保持它们公开会是糟糕的编码练习,所以要从头开始,这就是我从第一天开始做的事情。当我在一个页面上拥有所有代码时,我从来没有遇到任何问题,但是当我尝试使用函数访问我的私有变量时,我得到一个未定义的错误。

在我的课堂上.h

class classs
{
public:
    classs(void);
    void setAge(int x);
    int getAge();
private:
    int age;
};

然后在我的classs..cpp中我有:

void setAge(int x)
{
    age = x;
}

int getAge()
{
    return age;
}

这里告诉我年龄不明确。当所有这些代码都在一个.cpp(main.cpp)中时,我从来没有遇到任何问题。我的classs.cpp上还有#include classs.h

6 个答案:

答案 0 :(得分:9)

这种情况的发生不是因为您的setAge定义位于不同的文件中,而是因为它现在位于class classs {}块之外。编译器无法知道setAge是该类的成员,因此它在范围内没有类的属性。

通过将您的函数声明为classs::setAge

来修复它

答案 1 :(得分:4)

您必须使用范围解析运算符正确调整函数定义的范围,如下所示:

// in person.h
class Person
{
public:
   void set_age(int age);
private:
   int age_;
};

// in your cpp file:
#include "person.h"

void Person::set_age(int age)
{
   age_ = age;
}

答案 2 :(得分:2)

你的功能应该是

    void classs::setAge(int x)
    {
        age = x;
    }

classs::部分将该函数定义与声明函数setAge的类相关联。

答案 3 :(得分:2)

您必须指明范围:

void classs::setAge(int x)
{
    age = x;
}

int classs::getAge() 
{ 
    return age; 
}

答案 4 :(得分:1)

签名是“void classs :: setAge(int x)”。这意味着setAge是类的成员。

答案 5 :(得分:1)

首先,对于数据封装,我会在头文件中内联方法。

即。

inline void setAge(int x) { age = x; }
inline int getAge() { return age; }

第二,代码文件不知道setAge是你的类的成员,除非你在它的前面加上你的类名。

即。

void Person::setAge(int x)
{

 //your code here.
}