1

Fooから派生したパラメーターを使用して型オブジェクトが返されるこのジェネリックメソッドがある場合string s:

Foo createFoo(string s)
{
    int index, first, second, third, fourth, fifth;

    Foo fooName(int first, int second,int third,int fourth,int fifth);
    return fooName;
}

そして、主に、私は次のようなことをしようとしています:

Foo newFoo = createFoo(argv[2]);

コンパイラでこのエラーが表示されるのはなぜですか?

file.cc:30:1: エラー: 'Foo' はタイプ file.cc の名前ではありません: 関数内
'int main(int, char**)': file.cc:180:38: エラー: 'createFoo' ではありませんでした
このスコープで宣言された

Javaから来て、このようなことをしても通常は問題はありませんが、なぜこれがC++で問題になるのでしょうか? どうすればこれを修正できますか?

編集 1: 私のFooクラス定義がどこにあるかを尋ねるいくつかの提案。メソッドの後に配置されていたので、コードのクラス定義セグメントの後にメソッドcreateFooを移動してコンパイルを試みました。今、新しいエラーが発生します:createFooFoo

file.cc: 関数内 'Foo createFoo(std::string)': file.cc:153:9:
エラー: 'Foo (*)(int, int, int, int, int)' から変換中
非スカラー型 'Foo' が要求されました
4

4 に答える 4

0

Mertは、私のメソッドの場所を質問するのに正しかった。メソッドcodeblockは、ファイル内のFooクラス定義の場所の後に配置する必要があります。

于 2012-04-25T17:13:40.013 に答える
0

「Foo」を定義するヘッダーが含まれていないか、それが定義されている名前空間からプルするために using ディレクティブを追加するのを忘れています。

于 2012-04-23T23:12:27.733 に答える
0

ステートメントreturn fooName;は関数fooNameを返しています。関数呼び出しの結果を返すつもりだったと思います。次のようにする必要がありますreturn fooName(first, second, third, fourth, fifth);

于 2012-04-24T01:39:22.517 に答える
0

あなたの2番目のエラーに関して、変換エラー:

Foo fooName(int first, int second,int third,int fourth,int fifth);

オブジェクトコンストラクターにいくつかのパラメーターを渡して、新しいオブジェクトインスタンスを作成しようとしています。しかし代わりに、新しい関数を宣言することになります。これを修正するには、パラメータから型名 (「int」) を削除します。

また、最も厄介な parseにも注意する必要があります。

于 2012-05-04T10:52:24.827 に答える