我有这样的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
为什么我不能在下一个struct中使用我的struct作为列表?
答案 0 :(得分:2)
namespace
和struct
具有相同的名称。当您键入timers::
时,编译器会认为这是指struct
,而不是namespace
(它是一种名称阴影)。
因此,由于类timers
尚未完全编写,编译器会抱怨“不完整”类型。
让class
和namespace
具有相同名称是一个坏主意,但如果您只输入以下代码,则可以编译:
std::list<timer> timers_list;
因为当你将某个东西引用到同一个名称空间时,你不需要显式名称空间。