2013-01-01 172 views
0

此刻我想在C聲明一個全局對象++如下: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

does class.h include globals.h? –

+1

什麼是班級? –

回答

1

問題出在class.h,包括globals.h。你說如果你這樣做,程序編譯但會引發訪問衝突。然後邏輯中有一個錯誤,這是一個不同的問題。

先修復編譯器錯誤。訪問衝突可能是因爲你沒有正確地初始化全局變量 - 也就是說,因爲你擁有它,它只是一個NULL指針。

+0

但是,如果我把Main.cpp中的所有內容放在一起,它就會起作用。如果我從'class.h'中刪除'globals.h'並保持其他所有內容相同,我現在會在Main中得到錯誤'。cpp:錯誤C2065:'Obj':未聲明的標識符。 – TheExplosiveSheep

+0

這確實是一個不正確的初始化。謝謝! – TheExplosiveSheep

1

C2143通常表示編譯器在變量聲明之前未找到class Class的定義/聲明。

你可以擁有它的一種方法是,你可能錯過了在class.h的類定義結尾的分號。

class.h

你有

class Class 
{ 
    .... 
} 

你已經忘記上面的分號。

更改爲

class Class 
{ 
    .... 
} ; 

如果不是這種情況,還有沒有其他的原因Class類的定義不class.h發現 - 是它裏面的#ifdefs什麼?

嘗試使用/ P進行編譯,然後在編輯器中打開main.i,並檢查是否在extern聲明之前看到class Class的聲明。

+0

我確實有分號。 – TheExplosiveSheep

+0

這不是問題,請閱讀評論。 –

+0

@TheExplosiveSheep - 你可以顯示部分class.h嗎? – user93353