c ++全局对象声明

时间:2013-01-01 16:29:30

标签: c++ object declaration

目前我正试图在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解释说这就是它的完成方式。

2 个答案:

答案 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指针。