我正在处理的代码库已经自动从Java转换为C ++(是的,是的,我知道,不是一个好主意,但长篇故事简短,需要它),我发现在许多课程中我有两个与我的ClassNameXXX类型相关的错误:
‘ClassNameXXX’ does not name a type
和
‘ClassNameXXX’ has not been declared
我知道问题的存在是ClassNameXXX.h标头和其他标题之间的循环包含问题(我正在努力解决这个问题)但是我想知道这两个错误消息之间的实际区别是什么(也许这会给我一些解决周期的线索。
提前致谢!
答案 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
没有命名类型。