5

C++ プログラム内で typedef 構造体を使用しようとしています。テンプレートの typedef 構造体ポインターを返すメソッドをクラスに追加しようとしたときにエラーが発生するまで、次のコードを書き始めました。

StructSource.h

template <typename T>
class StructSource {
public:
    struct TestStruct{
        T value;
    };
};

ユーザー.h

#include "StructSource.h"

class User {
    public:
        typedef StructSource<int>::TestStruct IntStruct;

        IntStruct *getIntStruct();

};

ユーザー.cpp

#include "User.h"

IntStruct *User::getIntStruct() {
    return 0;
}

これにより、GCC でコンパイルすると次のエラーが発生します。

User.cpp:3:1: エラー: 'IntStruct' に型の名前がありません

なぜそうなるのか説明するのに途方に暮れています。不足しているタイプの情報は何ですか?

4

3 に答える 3

11

ここでは「ユーザー」も「名前空間」です(実際には、ほとんどのコメント投稿者が指摘しているように、「名前空間」は簡単な回答のためのものでした)。

User::IntStruct *User::getIntStruct() {
    return 0;
}
于 2012-05-29T14:39:46.503 に答える
5

必要なもの:

User::IntStruct *User::getIntStruct() { ... }

IntStruct はUserスコープ内で定義されていますが、関数の戻り値はスコープ内にありません。これらのスコープの問題については、こちらで説明しています。

于 2012-05-29T14:37:59.877 に答える
2

はクラス内で定義されているためIntStruct、デフォルトの名前検索パスの一部であるクラス コード内を除いて、クラス名を使用して参照する必要があります。

User::IntStruct *User::getIntStruct() {

構文は同じですが、これは名前空間と同じではありません。

于 2012-05-29T14:45:29.047 に答える