2016-05-23 13 views
0

私は、特性クラスを使用して契約クラスを実装したいと思いますか?C++。なぜ私はtraitクラスを使ってインターフェイスを実装できないのですか?

コード:

class MyContract { 
public: 
    virtual void foo()=0; 
}; 

class TraitClass { 
public: 
    void foo() 
    { 
     Serial.println("hello"); 
    } 
}; 

class MyClass : public virtual MyContract, public TraitClass { 
    // MyClass stuff here. 
}; 

void setup() 
{ 
    MyClass* myClass = new MyClass(); 
    myClass->foo(); 
} 

答えて

1

MyClassMyContractスーパークラスで宣言された純粋な仮想メソッドを実装していない私は、この次のコードをコンパイルするときに私はいくつかのエラーを得たので。ただそれがTraitClassから継承しているからといって、TraitClassfoo()がそれを実装しようとしているわけではありません。

あなたは、ドットを接続する必要があります。

class MyClass : public virtual MyContract, public TraitClass { 


    void foo() override 
    { 
     TraitClass::foo(); 
    } 
}; 
+0

私は、このアプローチを使用してクリーンなコードを取得することができますが。とにかくありがとうございました。 – Nugraha

関連する問題