0

別のコンストラクター内でクラス コンストラクターを初期化しようとしています。GCC は、「型 'foo' には呼び出し演算子がありません。」というエラーを発生させます。

class foo {  
    type arg1, arg2;
    foo (type _arg1, type _arg2) {  
        _arg1=arg1;  
        _arg2=arg2;  
    }  
}

class foo2 {  
    foo member;

    foo2(type _arg1, type _arg2) {  
        member(_arg1, _arg2);  
    }  
}
4

5 に答える 5

5

2つの問題:

まず、Markの回答にあるように、fooコンストラクターはパブリックである必要があります。

次に、メンバーをコンストラクターで初期化するには、次の構文を使用する必要があります。

foo2(type _arg1, type _arg2) :
   member(_arg1, _arg2)
   { /* code */ }  
于 2011-04-27T02:04:56.653 に答える
0

コンストラクターは公開されていません。デフォルトでは、特に指定しない限り、クラス内のすべてがプライベートです。ただし、これが正確なエラーメッセージを説明しているのかわかりません。

于 2011-04-27T02:00:42.863 に答える
0

イニシャライザリストが必要です。

foo2(type _arg1, type _arg2) : member(_arg1,_arg2) { }
于 2011-04-27T02:02:55.863 に答える
0

memberのコンストラクターを使用しようとしています。これは、コンストラクター本体ではなく、初期化子リストで行う必要があります。つまり、次のようになります。

foo2(type _arg1, type _arg2)
    : member(_arg1, _arg2)
{  
}  
于 2011-04-27T02:03:00.420 に答える
0

疑似コードはあなたの意図を説明するかもしれませんが、あなたが説明した方法でエラーが発生しないため、エラーを説明しません:

class foo {  
    type arg1, arg2;
    foo (type _arg1, type _arg2) {  
        _arg1=arg1;  
        _arg2=arg2;  
    }  
}

class foo2 {  
    foo member;

    foo2(type _arg1, type _arg2) {  
        member(_arg1, _arg2);  
    }  
}

それは役に立つ診断をもたらしますが:

gcc -Wall junk.cc 
junk.cc: In constructor ‘foo2::foo2(int, int)’:
junk.cc:12:32: error: no matching function for call to ‘foo::foo()’
junk.cc:3:5: note: candidates are: foo::foo(int, int)
junk.cc:1:11: note:                 foo::foo(const foo&)
junk.cc:13:28: error: no match for call to ‘(foo) (int&, int&)’
junk.cc: At global scope:
junk.cc:14:5: error: expected unqualified-id at end of input

これは、ここに「ちょっと似た」コードを投稿して有用な回答を期待するべきではないことを示しています。

于 2011-04-27T02:08:24.837 に答える