9

这是 Qt Creator 中一个非常令人沮丧的错误消息: ’XYZ’ does not name a type. 这通常意味着类XYZ中存在阻止编译器生成类型的错误,但没有额外的提示说明出了什么问题。

有什么建议么?

4

11 回答 11

5

我刚刚遇到了这个问题,就像Arckaroph所说的那样:问题是当我们在源代码文件中包含头文件时,我们在其中使用指令#ifndef,我们不能将它再次包含在头文件中将它包含的类的类型赋予源代码文件中的变量

例子 :

class1.h 包含 Class1 class2.h 包含 Class2 class2 如果我们在 class2 中包含 class1.h,则有一个具有 class1 类型的私有变量 V。CPP我们不能将它包含在 class2.h 中以给 V 一个 class1 类型。

所以我们在 class1.h 之前放入 class2.cpp class2.h 或者我们从 class2.cpp 中删除 class1.h

于 2011-08-16T10:25:36.497 回答
4

当我更换诸如

#include <QTextEdit>

class QTextEdit;

这个问题消失了。

于 2015-06-14T10:52:18.460 回答
3

在你abc.cpp确保你包括xyz.h之前包括abc.h

不知道为什么交换两者会有所不同,但这对我来说确实如此。

于 2011-02-09T18:17:18.820 回答
2

您是否从编译器或 IDE 中得到错误(作为波浪线下划线)?我在 Qt Creator 1.2.9 中遇到过这个问题,我认为这是 IDE 中的一个错误。

于 2009-09-15T14:35:47.340 回答
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
};
于 2010-11-06T03:44:46.103 回答
1

在最近的一个 QT 项目中,我刚刚安装了最新的 QT (3/2011),我通过添加这个来解决三个停止我构建的问题......

#include <sys/types.h>

...在包含引发错误的头文件之前。做到了。

我不知道他们为什么会分发有此类问题的东西,也许在其他系统中 types.h 包含在其他东西中,但无论如何都不是我的情况。希望对某人有所帮助。

于 2011-03-31T05:37:43.390 回答
1

我为自己找到了解决方案。假设我有 A 类和 B 类。“Ah”包括“Bh”并且有 B 的实例作为成员。"Bh" 包括 "Ah" 并且有 A 的实例作为成员。编译器在声明 A 类成员的代码行的“Bh”中给我一个错误:

"A doesn't name type"

我所做的是在“Ah”中删除#include“Bh”并将#include“Bh”放到“A.cpp”中。在A类声明之前,我写了B类;

...
// #include "B.h"
class B;

class A
{
... 
B m_b;
};
...

为我工作,祝你好运!

于 2018-02-15T16:19:46.013 回答
0

#include'ing 对应的头文件有帮助吗?

于 2009-09-14T13:52:01.163 回答
0

如果您使用的是模板,那么您需要在类名前加上“typename”,以便编译器可以将其识别为类型......

template <typename t> //...
于 2009-09-14T13:52:56.533 回答
0

我想到了两种可能性:
1. 也许你在 connect() 调用中有 SLOT 而不是 SIGNAL。2. 有时对 .PRO 文件进行无偿编辑(例如插入和删除空格)会有所帮助,以便运行 QMake 并生成 .moc 文件。

于 2011-02-09T19:00:38.690 回答
0

在我的情况下,我没有使用定义类的命名空间。标题的内容包含在命名空间中,但源文件缺少using namespace指令。

.h

namespace mynamespace {
    class MyClass : public QWidget
    { 
        ...
    }
}

.cpp

using namespace mynamespace

MyClass::MyClass(QWidget *parent) : QWidget(parent)
{
}
于 2016-07-18T00:55:26.783 回答