gpt4 book ai didi

c++ - Qt 子目录包含类

转载 作者:行者123 更新时间:2023-11-30 03:58:41 27 4
gpt4 key购买 nike

我正在按照 Qt Echo Plugin 示例尝试编写复杂的应用程序。我的项目有以下结构:

MainDir \
Main.pro
kernel \
kernel.pro
abstractinterface.h
main.cpp
testplugin \
testplugin.pro
abstractplugin.h
abstractplugin.cpp

问题出在插件头文件中:

#include <QObject>
#include <QtPlugin>
#include "abstractinterface.h"

class AbstractPlugin : public QObject, AbstractInterface
// An error appears here
// expected class-name before '{' token
{
Q_OBJECT
//... plugin initialization code ...
public:
explicit AbstractPlugin(QObject *parent = 0);
};

此外,自动完成无法找到类 AbstractInterface。

所以,问题是:我做错了什么?在 testplugin.pro 文件中,我有行 INCLUDEPATH += ../kernel/

感谢任何帮助。

----- 编辑 -----
抽象接口(interface).h

#include <QtPlugin>

#define INTERFACE_ID "AbstractInterface/1.0"

class AbstractInterface
{
public:
virtual ~AbstractInterface();


virtual void init();
virtual void enable();
virtual void disable();
};

Q_DECLARE_INTERFACE(AbstractInterface, INTERFACE_ID)

最佳答案

鉴于您粘贴的文件看起来正确并且可以在此处工作,我倾向于您的问题是这一行:

INCLUDEPATH += ../kernel/

您可能会从主项目文件所在的项目根目录执行 qmake,递归调用 qmake 以生成 Makefile。但是,在生成时,上述路径将从项目根目录而不是子目录延伸。请改用此文件修复您的 testplugin.pro 项目文件:

INCLUDEPATH += $$PWD/../kernel/

但是,更好的设计是不在该项目文件中处理它,而是在头文件所在的另一个 kernel.pro 中处理它。将它添加到那里是更灵活的设计:

INCLUDEPATH += $$PWD

编辑:根据您在原始问题中没有的评论,您似乎还有另一个问题。您似乎在两个不同的文件中混淆了调用相同的包含守卫,这就是为什么第二次包含没有为您提供可访问性。

关于c++ - Qt 子目录包含类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27306743/

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