目前我正试图在c ++中声明一个全局对象,如下所示:
在globals.h中
#pragma once
#include "Class.h"
extern Class *obj;
然后在一个名为globals.cpp的单独文件中我有
#include "globals.h"
Class *obj;
然后在main.cpp中我有
#include "globals.h"
但编译器向我抛出此错误
in globals.h: error C2143: syntax error : missing ';' before '*'
自从这篇文章以来,我不明白这一点:c++ global object解释说这就是它的完成方式。
答案 0 :(得分:1)
C2143
通常意味着编译器在变量声明之前没有找到class Class
的定义/声明。
你可以拥有它的一种方法是你可能在class.h
的类定义末尾错过了分号。
在class.h
你有
class Class
{
....
}
你忘记了上面的分号。
更改为
class Class
{
....
} ;
如果不是这样,有没有其他原因在class.h中找不到类Class的定义 - 它是在#ifdefs里面还是什么?
尝试使用/ P进行编译,然后在编辑器中打开main.i
,并检查在class Class
语句之前是否看到extern
的声明。
答案 1 :(得分:1)
问题在于class.h
,包括globals.h
。你说如果这样做,程序会编译但会引发访问冲突。然后逻辑上出现错误,这是一个不同的问题。
首先修复编译器错误。访问冲突可能是因为你没有正确地初始化全局 - 也就是你拥有它,它只是一个NULL
指针。