Qt 不承认声明的类

Posted

技术标签:

【中文标题】Qt 不承认声明的类【英文标题】:Qt not recognising declared class 【发布时间】:2013-08-14 22:12:08 【问题描述】:

我使用 Qt 4.6.3 为 FriendlyARM 编写应用程序。我正在尝试将 2 个指针(指向类 axesParam1mainWin)传递给当前类 localTime,但出现这些错误:

localtime.h:17:错误:“axesParam1”尚未声明 localtime.h:18:错误:'mainWin' 尚未声明 localtime.h:26:错误:ISO C++ 禁止声明没有类型的“axesParam1” localtime.h:26: 错误:预期 ';'在“*”标记之前 localtime.h:27:错误:ISO C++ 禁止声明没有类型的“mainWin” localtime.h:27:错误:预期的“;”在“*”标记之前 在 trackinputstatus.h:5 包含的文件中, 从trackinput.h:5, 来自 mainwin.h:8, 来自 geoparam.h:5, 从axesparam3.h:5, 从轴参数2.h:5, 从axesparam1.h:5, 来自 main.cpp:14: trackparamstatus.h:16: 错误: 'mainWin' 尚未声明 trackparamstatus.h:24:错误:ISO C++ 禁止声明没有类型的“mainWin” trackparamstatus.h:24: 错误: 预期 ';'在“*”标记之前 main.cpp:在函数'int main(int,char**)'中: main.cpp:52: 错误: 没有匹配函数调用'localTime::setChildren(axesParam1*)' localtime.h:17:注意:候选人是:void localTime::setChildren(int*) main.cpp:61: 错误: 没有匹配函数调用'localTime::setHome(mainWin*)' localtime.h:18:注意:候选人是:void localTime::setHome(int*) main.cpp:62: 错误: 没有匹配函数调用'trackParamStatus::setHome(mainWin*)' trackparamstatus.h:16:注意:候选人是:void trackParamStatus::setHome(int*)

我没有声明setChildern 接受int* 作为参数,那它为什么坚持int*

我已经包含了头文件localtime.h

#ifndef 本地时间_H #define LOCALTIME_H #include &ltQWidget> #include “axesparam1.h” #include “mainwin.h” 命名空间 ui 类本地时间; 类本地时间:公共QWidget Q_OBJECT 民众: localTime(QWidget *parent = 0); 〜本地时间(); 无效 setChildren(axesParam1 *); 无效 setHome(mainWin *); 受保护: 无效更改事件(QEvent *e); 私人的: ui::localTime *ui; 轴参数1 *P1; 主赢 *w; ; #endif // LOCALTIME_H

【问题讨论】:

您是否将localtime.h 包含在axesparam1.hmainwin.h 中? @thuga 我在 main.cpp 中使用它。我认为当 cpp 文件未扩展/实现时,声明的头文件(因此声明的类)仅限于单个 cpp 文件。还是我错过了什么? 如果axesparam1.h 包含localtime.h,由于.h 文件开头的#ifndef 行将跳过声明。这就是为什么我要求您检查axesparam1.h 是否包括localtime.h @thuga 那么当我需要多个班级的班级时该怎么办? 你使用前向声明。您可以从您的localtime.h 中删除axesparam1.hmainwin.h 包含,并转发声明这些类。然后将这些标题包含在您的 localtime.cpp 文件中。 This should be a good read. 【参考方案1】:

你看起来太低了。在查看 setChildern 之前,您应该查看 axesparam1 和/或 mainwin。

localtime.h:17:错误:“axesParam1”尚未声明 localtime.h:18: 错误:'mainWin' 尚未声明

你之前有一些语法错误。 setChildern 只是一些后续错误。

【讨论】:

以上是关于Qt 不承认声明的类的主要内容,如果未能解决你的问题,请参考以下文章

错误 C2062:QT 中的信号声明中出现意外类型“void”

QT基础

Qt入门教程QObject篇属性系统

Qt入门教程QObject篇属性系统

[Qt入门篇]5 Qt的属性系统——声明属性

Qt入门教程QObject篇属性系统