C2653:不是没有预编译标头的类或命名空间
C2653: not a class or namespace without precompiled headers
我正在使用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
。
相关文章:
- 如何使用 soong 命名空间来有条件地编译模块
- 使用 make 编译 MPI,几个命名空间错误,例如"错误:未知类型名称'使用'?
- 无法获取 wig %ignore 以忽略命名空间中的类,从而导致编译错误
- C++ 使用命名空间时,模板函数无法使用 g++ 进行编译
- 非命名空间范围内的显式专用化不会在 GCC 中编译
- 库期望平面命名空间中的符号,尽管使用两级命名空间编译
- 在命名空间中使用自己的类比较 std::vector 不会编译
- 使用命名空间别名编译 OpenCV
- 包含命名空间的类模板的前向声明会导致编译错误
- C2653:不是没有预编译标头的类或命名空间
- 每个编译单元是否只有一个未命名的命名空间
- 命名空间 X 中具有类 X 的模板类 Y 无法在 VS2010 中编译
- 是否可以在编译时获得一个包含命名空间和类名的字符串
- C++中的编译错误可能是命名空间问题
- clang 3.3 可以在 VS 2010 中使用命名空间编译代码
- 为什么 rand() 在不包含 cstdlib 或使用命名空间 std 的情况下编译
- 什么是“使用命名空间 std;”,为什么我需要它来编译具有最新C++编译器的程序
- C++ 全局命名空间编译问题
- 为什么结构必须与模板类位于同一命名空间中才能编译
- 命名空间编译问题