0

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

4

2 回答 2

1

C2143通常意味着您的编译器class Class在变量声明之前没有找到定义/声明。

一种方法是您可能错过了class.h.

class.h

你有

class Class
{
    ....
}

您忘记了上面的分号。

改成

class Class
{
    ....
} ;

如果不是这种情况,是否还有其他原因在 class.h 中找不到类 Class 的定义 - 是在 #ifdefs 内还是什么?

尝试使用 /P 编译,然后main.i在编辑器中打开并检查是否在语句class Class之前看到extern声明。

于 2013-01-01T16:38:43.200 回答
1

问题在于class.h包含globals.h. 你说如果你这样做,程序会编译但会引发访问冲突。然后逻辑上有错误,这是一个不同的问题。

首先修复编译器错误。访问冲突可能是因为您没有正确初始化全局 - 即您拥有它,它只是一个NULL指针。

于 2013-01-01T16:43:20.313 回答