错误之间的区别"没有命名类型"并且"尚未宣布"

时间:2015-09-24 09:46:55

标签: c++ include

我正在处理的代码库已经自动从Java转换为C ++(是的,是的,我知道,不是一个好主意,但长篇故事简短,需要它),我发现在许多课程中我有两个与我的ClassNameXXX类型相关的错误:

‘ClassNameXXX’ does not name a type

‘ClassNameXXX’ has not been declared

我知道问题的存在是ClassNameXXX.h标头和其他标题之间的循环包含问题(我正在努力解决这个问题)但是我想知道这两个错误消息之间的实际区别是什么(也许这会给我一些解决周期的线索。

提前致谢!

1 个答案:

答案 0 :(得分:2)

  

'ClassNameXXX'尚未声明

这个,顾名思义,当您尝试定义尚未声明的内容时,例如,如果您在不声明void SomeClass::foo(){}的情况下编写SomeClass(例如,您忘记了{{ 1}}在someClass.cpp中)。编译器知道您正在尝试定义#include someClass.h的成员,但无法找到它,并且会给您错误。

  

'ClassNameXXX'未命名类型

这个在不同的情况下上升,例如

SomeClass

这里编译器理解class MyClassOne { MyClassTwo _member;//error }; class MyClassTwo { }; 应该 MyClassTwo类型,但是因为_member还没有在那个地方定义,编译器不知道这样的类型存在,因此它告诉你MyClassTwo没有命名类型。