gpt4 book ai didi

Qt - moc 导致 C2504 : base class undefined

转载 作者:行者123 更新时间:2023-12-04 18:31:35 25 4
gpt4 key购买 nike

我遇到了一个问题,我已经尝试解决了一段时间,但我完全被难住了。所以我有两个类,X 和 Y,它们每个都有自己的头文件,X.h 和 Y.h。每个都是一个 Q_OBJECT 并且在头文件中有那个宏定义。

class Y: public X { Q_OBJECT ...}

Y 的定义读取。 X 的定义如下:

class X: public QGLWidget {Q_OBJECT ...}

当我编译时,X.cpp 和 Y.cpp 编译正确并且在那个阶段没有问题。 moc 文件也可以毫无问题地生成。

但是,当标准 QT 构建过程开始编译 moc_X.cpp 时,它会给我“C:\path\Y.h(34) : error C2504: 'X' : base class undefined”。但这在编译 Y.cpp 或 X.cpp 时不会发生,它只会在编译 moc 文件时发生!有任何想法吗?构建将在 moc 阶段失败,而只有 moc 阶段似乎非常奇怪。非常感谢您的帮助!

最佳答案

我已经尝试根据您提供的描述复制它,但未能成功。

所以,这里有一些值得检查的东西:

include guards 有错误吗?

检查您是否在 2 个不同的 header (即 #ifndef X_H#define X_H 行)中意外地得到了 2 个同名的 include-guards

(根据您的描述,这可能不太可能:如果错误是在 moc_Y.cpp 的编译中,则更有可能)

信号或槽中使用的类型的前向声明?

有时信号或槽中的参数可能需要包含额外的 header 。

我能解释的最好方法是说,在某些情况下,您的 header 可以通过对类的前向声明来处理,但是 moc 可以生成需要实际创建的代码或销毁您的 header 仅转发声明的类型。

如果是这种情况,有一种方法可以将代码添加到 .ui,请求包含前向声明类型的额外 header 。但最简单的解决方案是在 X.h 或 Y.h 中用适当的 header 替换前向声明。

检查 moc_X.cpp 文件的内容

如果以上方法没有帮助,而且您还没有这样做,我建议您打开有问题的 moc 文件并阅读代码。一旦你看到它在做什么,它可能会给你一些想法。

关于Qt - moc 导致 C2504 : base class undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7407792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com