所以我发现了在类中定义私有变量的问题。在C++类中定义私有变量/属性
此刻,我Apple.h文件看起来像这样:
#ifndef Apples_h
#define Apples_h
class Apples {
public:
Apples();
void eat();
void peel();
void slice();
private:
int _seeds;
String _type; // originally int by mistake
};
#endif
我Apple.cpp文件看起来像这样:
#include "Apples.h"
int _seeds = 0; // default
String _type = 0; // default
Apples::Apples(){
_seeds = 5000;
_type = "notYummy";
}
// pretend all the public methods are implemented and are fine (no issues with them)
这实际上工作得很好:我已经定义了一个私人属性_seeds在我的头文件和.cpp文件中。
当我在别的地方定义一个属性时,问题就出现了,比如在父类/主文件中。
然后它抱怨说它有多个定义。对我来说,这有点奇怪,因为我认为Apple.cpp中的_seeds属性应该是私有的(并且因此是未知的),但是它以某种方式将它拾取并冲突到另一个文件中。
我查找了一个制作类的例子,他们没有在.cpp文件中定义类属性,但只在头文件中,它似乎神奇地创建了这些私有属性。 cpp文件(它们没有在.cpp文件中的任何位置定义)。
我的“最接近的”语言可能是Java,在那里我定义了类实现文件中的所有类变量/属性,所以我有点困惑。
任何人都可以证实:
这不是C/C++而言,您应该只定义在头文件中的专用属性。
类.cpp文件中的任何变量/属性都是一些如何在'全局命名空间'中,他们可以在其他文件中碰撞。
而且,如果第二点是真实的,能将它们实际上只是调用另一个类/文件_seeds访问?
,如果你把它们写在类外(它可能不会,因为我认为这仅仅是一个语言的东西无所谓,但是这是代码一个Arduino。)
这听起来对我来说是不可能的。课堂中的属性仅限于课堂。你能发布你的代码吗? – Chiel
TL; DR:应该将_type作为int还是一个string? –
请不要在变量名前面加下划线 - 每个以下划线开头的名字都保留给实现,用作全局名称空间中的名字 – Constantin