C2653:不是没有预编译标头的类或命名空间

C2653: not a class or namespace without precompiled headers

本文关键字:命名空间 编译 C2653      更新时间:2023-10-16

我正在使用VisualStudio 2010构建一个带有Qt 4.8.3的简单程序,并且在使用简单的方法定义时遇到了麻烦:

这是我的代码:

贵助手

#ifndef GUIHELPER_H 
#define GUIHELPER_H
#include "GuiHelper.cpp"
#include <QString>
#include <QWidget>
#include <QFile>
class GuiHelper
{
private:
static void useStyleSheet(QString, QWidget*);  
};
#endif //GUIHELPER_H

和 GuiHelper.cpp:

#include <QString>
#include <QWidget>
#include <QFile>
#include "GuiHelper.h"
void GuiHelper::useStyleSheet(QString filename, QWidget* widget)
{
// loads style file and apply style
QFile file(":/Resources/"+filename);
file.open(QFile::ReadOnly);
QString styleSheet = QLatin1String(file.readAll());
widget->setStyleSheet(styleSheet);
}

我收到错误 C2653:GuiHelper 不是一个类或 namspace,但我真的看不出有什么问题......

在使用QT插件创建项目时,我还检查了"无预编译头"

谢谢!

快速修复 - 删除

#include "GuiHelper.cpp"

从标题。

问题的原因:编译器编译源代码 - 即.cpp文件。它开始解析 cpp 文件并达到

#include "GuiHelper.h"

这告诉它处理标头并粘贴其内容 - 标头的第二行确实如此

#define GUIHELPER_H

之后,你

#include "GuiHelper.cpp"

反过来尝试处理和粘贴cpp文件,再次尝试处理标头。由于已定义GUIHELPER_H,因此不再处理标头,但请记住尚未定义该类。所以它到了线上

void GuiHelper::useStyleSheet(QString filename, QWidget* widget)

但是您会收到错误,因为尚未定义GuiHelper