所以我發現了在類中定義私有變量的問題。在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