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