2016-06-20 33 views
1

私はこのようなtimers.hファイルがあります:私は私のプログラムをコンパイルしようとすると不完全な型、名前空間

namespace timers { 
    struct timer { 
    std::string next; 
}; 

struct timers { 
    std::list<timers::timer> timers_list; 

    timers(); 
}; 

は、それが示してそれを聖霊降臨祭:

modules/timers.h:23:13: error: incomplete type 'timers::timers' used in nested name specifier 

なぜ私ができます私の構造体をリストとして次の構造体に使用しないでください。

+0

名前空間と構造体に同じ名前を使用していますが、名前空間と構造体を変更しようとしましたが、違いがありますか? – thorsan

答えて

2

namespacestructは同じ名前です。 timers::と入力すると、namespaceではなくstructが参照されます(名前シャドウイングのようなものです)。

したがって、クラスtimersはまだ完全には書かれていないので、コンパイラは「不完全」型について不平を言っています。

それは同じ名前のclassnamespaceを持っている、しかし、あなたはちょうど入力した場合、あなたのコードをコンパイルすることができます悪い考えです:

std::list<timer> timers_list; 

あなたが参照するときに、明示的に名前空間を必要としないので同じものに何か

+0

ああ、はい、ありがとうございます。 – dragonn

関連する問題