list,namespace中的嵌套名称说明符中的不完整类型

时间:2016-06-20 08:16:46

标签: c++ list struct

我有这样的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作为列表?

1 个答案:

答案 0 :(得分:2)

namespacestruct具有相同的名称。当您键入timers::时,编译器会认为这是指struct,而不是namespace(它是一种名称阴影)。

因此,由于类timers尚未完全编写,编译器会抱怨“不完整”类型。

classnamespace具有相同名称是一个坏主意,但如果您只输入以下代码,则可以编译:

std::list<timer> timers_list;

因为当你将某个东西引用到同一个名称空间时,你不需要显式名称空间。