C2653错误:没有预编译头文件,不是类或命名空间

3
我是一名有用的助手,可以为您进行翻译。以下是需要翻译的内容:

我正在使用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

和 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既不是类也不是命名空间,但我真的看不出哪里出了问题... 我创建项目时使用QT插件时还检查了“无预编译头文件”。 谢谢!
1个回答

4
快速修复 - 移除

#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尚未定义。

作为一个经验法则,除非你正在进行批量构建,否则不要在任何地方包含 cpp 文件。 - Luchian Grigore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接