VS2012编译器错误C2143:缺少;以前*
Vs2012 compiler error C2143 : missing ; before *
运气好的话,这可能是一些非常明显的东西从我身边溜走,但我已经在 C2143 上挣扎了一段时间,我被难住了。
game.h(21): error C2143: syntax error : missing ';' before '*'
game.h(21): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
游戏.h
#ifndef GAME_H_
#define GAME_H_
#include <irrlicht.h>
using namespace irr;
using namespace irr::core;
using namespace irr::scene;
using namespace irr::video;
using namespace irr::io;
using namespace irr::gui;
#include <iostream>
#include "CInput.h"
#include "CAssets.h"
using namespace rtsirr;
IrrlichtDevice *device = 0;
IVideoDriver *driver = 0;
ISceneManager *manager = 0;
CAssets *assets = 0; // Line 21, error here
#endif
CAssets.h
#ifndef ASSETS_H_
#define ASSETS_H_
#include "Game.h"
namespace rtsirr {
class CAssets
{
public:
CAssets();
virtual ~CAssets();
ITexture* getTexture(stringw name);
IMesh* getMesh(stringw name);
IAnimatedMesh* getAnimatedMesh(stringw name);
void load();
private:
map<stringw, ITexture *> *textures;
map<stringw, IMesh *> *meshes;
map<stringw, IAnimatedMesh *> *animatedMeshes;
};
}
#endif
似乎 CAsset 没有被识别为有效类型,但我无法弄清楚为什么。导致问题的原因是什么?
谢谢。
你的包含中有一个循环依赖关系。 Game.h
包括CAssets.h
,而又包括Game.h
,甚至还没有定义CAssets
。预处理器的结果会有所不同,具体取决于包含的顺序。
从您的示例代码来看,除了类型之外,Game.h
似乎并不需要了解太多CAssets
。您可以将包含CAssets.h
替换为前向声明:
class CAssets;
您甚至可以提供一个仅执行此操作的CAssets_fwd.h
。否则,您将需要打破这两个标头之间的循环依赖关系。
相关文章:
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 函数中堆分配的效果与缺少堆分配的情况
- 缺少类型说明符,显式类型为"缺少错误"
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 在一定长度后从数组中打印时缺少整数
- 使用基类指针创建对象时,缺少派生类析构函数
- 不同的Visual Studio版本中缺少.dll
- 如何修复带有 clang 的参数'args'缺少默认参数的问题?
- 错误"Could not find Boost"(缺少:上下文标头)
- 找不到 FLTK(缺少:FLTK_INCLUDE_DIR)
- 为什么 std::span 缺少 cbegin 和 cend 方法?
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- MSYS2 MinGW程序包中缺少grpc_cpp_plugin协议
- 配置文件解析器仅返回以前的值
- CLANG格式在缺少libtinfo.so.5库中不起作用
- Xcode 语义问题引用或以前定义的代码
- 变量在使用赋值语句赋值后恢复为以前的值
- 为什么我会收到错误 C2143 语法错误:缺少"*"之前的';'?
- 语法错误: 缺少 ;以前*
- VS2012编译器错误C2143:缺少;以前*