2013-07-28 105 views
3

我想知道子類是否可以訪問main.cpp文件中的變量。例如:訪問主類變量的C++子類

Main.ccp

int x = 10; 

int main() 
{ 
    return 0; 
} 

示例類的CPP

Subclass::Subclass() 
{ 
    x = 5; 
} 

錯誤:

error: 'x' was not declared in this scope 

我是新來的編碼,我想知道這是否在某種程度上可能如果不是,我該怎麼做這樣的事情?

+0

全局變量是你應該很少使用的東西,如果有的話。 – Borgleader

+0

這是做什麼的原因? – soon

+0

我正在使用SDL,並在主內部創建了SDL_Surface變量,並嘗試從另一個類訪問它們,但我不知道如何。我需要能夠從兩個類訪問它 – Rapture686

回答

5

這是可能的,但通常不是一個好主意:

Main.ccp

int x = 10; 

int main() 
{ 
    return 0; 
} 

示例類的CPP

extern int x; 

Subclass::Subclass() 
{ 
    x = 5; 
} 

也許你想要做的,而不是什麼是傳遞一個參考x去相關的類或函數。

最起碼,這將是一個好主意,不同的結構是:

x.hpp:

extern int x; 

x.cpp

#include "x.hpp" 

int x = 10; 

class.cpp:

#include "x.hpp" 

Subclass::Subclass() 
{ 
    x = 5; 
} 
2

Add extern dec在class'cpp中插入x,然後編譯器會在其他cpp文件本身中找到x的定義。

變化不大的代碼:

Main.cpp的

#include "class.h" 

int x = 10; 

int main() 
{ 
    return 0; 
} 

示例類的CPP

#include "class.h" 

extern int x; 

Subclass::Subclass() 
{ 
    x = 5; 
} 

頭文件class.h

class Subclass { 
public: 
    Subclass(); 
}; 

而對於EXTERN關鍵字,參考這個:How do I use extern to share variables between source files?

+0

我這樣做了,現在它說undefined引用'x'而不是 – Rapture686

+0

@ user2548588有趣的是,它對我有用。至少你應該在頭文件中有一個類聲明,並且包含兩個cpp文件,對吧?更具體地說,我編輯了我的答案。 – lulyon

1

C++不是java。你在這裏沒有主類,並且從類中的方法訪問全局變量不是問題。問題在於訪問另一個編譯單元(另一個源文件)中定義的變量。

解決這個問題的方法是確保變量是在你使用它的編譯單元中定義的,就像Vaughn Cato建議的(當我輸入這個時)。