2016-07-31 7 views
0

クラス内でクラスオブジェクトを使用する方法、特にオブジェクト間で引数を渡す方法を学習したいと思います。私はCalc.sumCalc.subの2つのメソッドを提供する例オブジェクトCalcを作成しようとしています。数学エンジンとして別のオブジェクトPlusを使用する必要があります。 Plus.add関数はコンパイルされ、うまく動作します。しかし、calcplusという複数のインスタンスを開始する方法がわかりません。コード:別のクラスの複数のインスタンスを使用するクラス

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つのインスタンスの存在である)です用語(コメント)は正しい?

答えて

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) 
{ 
} 

であるべき。

ああ、それはそれはコンパイルされません

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

によって置き換えCalc

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

の定義にも間違っています。別の何かが間違っているに違いない。申し訳ありませんが、私は一日中グーグルで解決をしています。疲れているかもしれません。 – Combinatix

+1

"手作業による手動編集"で別のエラーが見つかりました:)、私の編集を参照してください。次回はコンパイルエラーを投稿してください。 "それはコンパイルされません"だけで十分ではありません。 –

関連する問題