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

C++ C2653:不是没有预编译头的类或命名空间,c++,class,namespaces,C++,Class,Namespaces,我正在使用VisualStudio 2010使用Qt 4.8.3构建一个简单的程序,但在简单的方法定义方面遇到了问题: 这是我的密码: GuiHelper.h #ifndef GUIHELPER_H #define GUIHELPER_H #include "GuiHelper.cpp" #include <QString> #include <QWidget> #include <QFile> class GuiHelper { private: st

我正在使用VisualStudio 2010使用Qt 4.8.3构建一个简单的程序,但在简单的方法定义方面遇到了问题:

这是我的密码:

GuiHelper.h

#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
\ifndef GUIHELPER\u H
#定义GUIHELPER\u H
#包括“GuiHelper.cpp”
#包括
#包括
#包括
类GuiHelper
{
私人:
静态void使用样式表(QString,QWidget*);
};
#endif//GUIHELPER\u 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);
}
#包括
#包括
#包括
#包括“GuiHelper.h”
void GuiHelper::useStyleSheet(QString文件名,QWidget*widget)
{
//加载样式文件并应用样式
QFile文件(“:/Resources/”+文件名);
打开(QFile::ReadOnly);
QString样式表=QLatin1String(file.readAll());
小部件->设置样式表(样式表);
}
我得到错误C2653:GuiHelper不是一个类或namspace,但我真的看不出有什么错

在使用QT插件创建项目时,我还选中了“无预编译头”


谢谢

快速修复-卸下

#include "GuiHelper.cpp"
从标题开始

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

#include "GuiHelper.h"
它告诉它处理标题并粘贴其内容-标题的第二行会这样做

#define GUIHELPER_H
之后,你

#include "GuiHelper.cpp"
然后尝试处理并粘贴
cpp
文件,该文件再次尝试处理标头。由于已经定义了
GUIHELPER\u H
,因此不再处理标头,但请记住,尚未定义类。所以这就到了底线

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

但是您会出现错误,因为尚未定义
GuiHelper

@BenoitHnte根据经验,不要在任何地方包含
cpp
文件,除非您正在进行批量生成。