我有如下的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

为什么我不能在下一个结构体列表中使用我的结构体?

最佳答案

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

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

拥有相同名称的classnamespace是一个坏主意,但是只要输入以下内容即可编译代码:

std::list<timer> timers_list;

因为您不需要显式命名空间,所以当您将某事物引用到同一个命名空间时。

关于c++ - 列表, namespace 中嵌套名称说明符中的类型不完整,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37917544/

10-12 14:14