2016-09-12 17 views
0

私はprog2.cppC++で2レベルの継承クラスから関数を呼び出す方法は?

#include "stack1.h" 
int main(void){ 
stack1 x(100); // Declare a stack1 x of length 100 
...... 
} 

でメインプログラムを持って、私はstack1.hからこのstack1を呼ぶが、この本来の機能がstack.hからである、とする必要があるがstack1.hの親クラスであります:

class stack 
{ 
.... 
public: 
stack(int length); 
.... 
} 

stack1.hは次のように探しています:

#include "stack.h" 
class stack1: public stack{ 
...... //irrelevant code 
} 

問題があると言ってMVSからのエラーを得た(100)stack1 X:

Error: no instance of constructor "stack1::stack1" matches the argument list.

私はこれを取り除くために多くの方法を試しましたが、それはもっと多くの問題につながりました。これをどうやって解決するのですか?

答えて

0

スーパークラスのコンストラクタを呼び出すのはサブクラスのコンストラクタの役割です。あなたが本当にここに関数を呼び出していない

struct stack1: public stack { 

    stack1(int n) : stack(n) {} 

}; 

あなたは、基本的には、そのスーパークラスのコンストラクタにそのパラメータを転送stack1クラスのコンストラクタを宣言する必要があります。あなたはコンストラクタを呼び出しています。コンストラクタのルールは異なります。通常、スーパークラスから継承したメソッドを呼び出すためにサブクラスを使用することに問題はありません。これは簡単です。しかし、この場合、実際にはメソッドではなく、コンストラクタです。異なる規則が適用されます。

0

親クラスのコンストラクタを使用する場合は、usingキーワードを使用できます。

class stack1 : public stack 
{ 
    using stack::stack;//use all constructors of stack 
    using stack::operator=; //use the assignment operators 
}; 

ただし、この値は期待どおりに値を初期化することに注意してください。

+0

私はちょうど1つのダニを使うことができました。お二人とも、私が望む正確なソリューションを提供しています、ありがとう! –

関連する問題