2016-07-31 77 views
0

我想了解如何在類中使用類對象,特別是如何在對象之間傳遞參數。我試圖創建一個示例對象Calc,它應該提供兩種方法Calc.sumCalc.sub。它應該使用另一個對象Plus作爲數學引擎。 Plus.add函數編譯並運行良好。但我不知道如何在calc中啓動plus的多個實例。代碼:使用另一個類的多個實例的類

class Plus{      // This class works well 
    public: 
     Plus(int);    // Structure 
     int add(int);   // Public method (function) 
     int myVar;    // Public property. Just to hold a value. 
    private: 
     int _init;    // Class-level private variable 
}; 

Plus::Plus(int init){   // Constructor 
    _init = init; 
} 

int Plus::add(int p){   // Method add 
    return _init + p; 
} 

/***************************************************************************/ 

class Calc{ 
    public: 
     Calc(int);    // Structure 
     int sum(int);   // Method sum 
     int sub(int);   // Method sub 
     int myVar;    // Public property 
    private: 
     Plus positive(int);  // Class-level private object definition ? 
     Plus negative(int);  // This is probably wrong ?? 
}; 

Calc::Calc(int init){   // Constructor (also wrong...) 
    Plus positive(init);  // Create object "positive" and pass the initial value 
    Plus negative(-init);  // Create object "negative" and pass the initial value 
} 

int Calc::sum(int n){ 
    return positive.add(n); 
} 

int Calc::sub(int n){ 
    return negative.add(n); 
} 

/***************************************************************************/ 

Plus two(2);  // Create class object two 
Calc five(5);  // Create class object five 

void setup(){ 
    Serial.begin(115200); 

    Serial.print("two.add(3) = "); 
    Serial.println(two.add(3));   // Calling instance of class Plus 
    two.myVar = 100; 
    Serial.println(two.myVar); 

    Serial.print("five.sum(3) = "); 
    Serial.println(five.sum(3));  // Calling instance of class Calc 

    Serial.print("five.sub(3) = "); 
    Serial.println(five.sub(3));  // Calling instance of class Calc 
} 

void loop(){} 

我的例子,這篇文章的啓發:http://arduinoetcetera.blogspot.cz/2011/01/classes-within-classes-initialiser.html但代碼中有一個實例只

1)如何內Calc

2申報Plus多個實例)是術語(評論)是否正確?

回答

1

你的問題就出在這裏

Calc::Calc(int init){   // Constructor (also wrong...) 
    Plus positive(init);  // Create object "positive" and pass the initial value 
    Plus negative(-init);  // Create object "negative" and pass the initial value 
} 

通過這樣做,你要創建本地變量具有相同的名稱爲您的會員:它沒有任何效果。

應該

Calc::Calc(int init): positive(init),negative(-init) 
{ 
} 

你初始化成員這樣,即使你的成員沒有一個默認的構造函數。

哦,那也是錯的Calc

Plus positive(int);  // Class-level private object definition ? 
    Plus negative(int);  // This is probably wrong ?? 

定義替代由

Plus positive;  // Class-level private object definition 
    Plus negative; 
+0

它不編譯。一定還有其他的錯誤。對不起,我花了一整天的時間搜索,我可能會很累。 – Combinatix

+1

我發現另一個錯誤「手動編譯」:),請參閱我的編輯。下次請發佈編譯錯誤。 「它不編譯」是不夠的。 –

相關問題