这是Qt Creator中的一个非常令人沮丧的错误消息:’XYZ’ does not name a type
。这通常意味着类XYZ
中存在一个错误,阻止编译器生成类型,但没有关于出错的其他提示。
有什么建议吗?
答案 0 :(得分:5)
我刚遇到这个问题,就像 Arckaroph 所说: 问题是,当我们在源代码文件中包含头文件,并且我们在其中使用指令#ifndef时,我们不能再将它包含在头文件中,以便将它的类型包含在源中的变量中代码文件
示例:
class1.h包含Class1 class2.h包含Class2 class2有一个class1类型的私有变量V. 如果我们在class2中包含class1.h。 CPP ,我们不能将它包含在class2.h中,以便为V提供class1类型。
所以我们在class1.h之前放入class2.cpp class2.h 或者我们从class2.cpp中删除class1.h
答案 1 :(得分:3)
在abc.cpp
xyz.h
中,请确保在加入abc.h
之前加入{{1}}。
不知道为什么交换这两个会对我产生影响但是它对我有用。
答案 2 :(得分:2)
您是否从编译器或IDE中获得错误(作为一个波浪形的下划线)?我在Qt Creator 1.2.9中遇到过这个问题,我认为这是IDE中的一个错误。
答案 3 :(得分:2)
我相信你正在声明某种类型的XYZ,例如
XYZ foo;
问题是XYZ尚未定义。
以下是我的问题和结论。你觉得怎么样?
我的问题是我有ABC班和XYZ班。 ABC类具有声明为XYZ类型的成员。 XYZ类具有声明为ABC类型的成员。编译器不知道XYZ类型是什么,因为它还没有定义它。因此,给出的错误是'XYZ'没有命名类型。
示例代码:
class ABC{
private:
XYZ *xyz; //XYZ is not defined yet
};
class XYZ{
private:
ABC *abc; //ABC is defined above
};
答案 4 :(得分:2)
我在qtcreator 3.4.1和QT 5.4上发现了这个问题,当我更换
时$id = -1;
$condition = eval('return $id > 0;');
if ($condition)
{
echo 'true';
}
else
{
echo 'false';
}
与
#include <QTextEdit>
这个问题消失了。
答案 5 :(得分:1)
在最近的一个QT项目中,我刚刚安装了最新的QT(2011年3月),我通过添加这个来修复了其中的三个停止我的构建......
#include <sys/types.h>
...在包含抛出错误的头文件之前。这样做了。
我不知道为什么他们会分发那些有这些问题的东西,或许在其他系统中.h.h包含在其他东西中,但不管怎么说都不包括在我的情况下。希望有所帮助。
答案 6 :(得分:0)
#include'相应的头文件有帮助吗?
答案 7 :(得分:0)
如果您正在使用模板,那么您需要在类名称前加上“typename”,以便编译器可以将其识别为类型...
template <typename t> //...
答案 8 :(得分:0)
我有两种可能性:
1.也许你在connect()调用中有SLOT而不是SIGNAL。
2.有时可以对.PRO文件进行无偿编辑(例如插入和删除空格),以便运行QMake并生成.moc文件。
答案 9 :(得分:0)
在我的情况下,我没有使用类定义的命名空间。标题的内容包含在命名空间中,但源文件缺少using namespace
指令。
.h
:
namespace mynamespace {
class MyClass : public QWidget
{
...
}
}
.cpp
:
using namespace mynamespace
MyClass::MyClass(QWidget *parent) : QWidget(parent)
{
}
答案 10 :(得分:0)
我找到了自己的解决方案。 说我有A班和B班。 “A.h”包括“B.h”并且具有B的成员作为成员。 “B.h”包括“A.h”并且具有A的实例作为成员。 编译器在代码行的“B.h”中给出了一个错误,其中声明了类A的成员:
"A doesn't name type"
我做的是“A.h”我删除#include“B.h”并将#include“B.h”放到“A.cpp”。在A类声明之前,我写了B类;
...
// #include "B.h"
class B;
class A
{
...
B m_b;
};
...
为我工作,祝你好运!