2012-06-11 128 views
0

我在寫C++項目,它包含幾個類。我創建了一個名爲Position.h .h文件中,有一個陣列和一個功能:C++中的全局變量

class Position 
{ 
public: 
    Coord positions[25]; 

public: 
    void setPos(int index, double x, double y) 
    { 
     positions[index].x = x; 
     positions[index].y = y; 
    } 
}; 

我想這個數組從另一個類中設置的值,所以在這個項目中的每個班級都會看到相同的值。 我在其他類中包含「Position.h」,但我無法訪問「位置」數組。

任何人都可以幫助我PLZ ??

+1

你能對你的問題更具體嗎? –

+0

只是把static關鍵字 – kechapito

+0

在這裏插入義務性的「globals suck」註釋。 –

回答

1

只是chnage聲明:

Coord positions[25]; 

static Coord positions[25]; 

也改變void setPos

static void setPos 

而accesing陣列,獲得它:

Position::positions[any value] 

但訪問陣列之前,請確保您調用函數setPos

+0

Thanx,我用它,我認爲它的工作原理,但現在我添加了「getPos(int index)」,它返回了double,並且在寫「 double x = Position :: getPos(5)「....也許在getters中它是不同的..? – kande

+0

@ kande:不,它是一樣的。但不要把所有東西都改成「靜態」,而應該退一步。你的程序中有多少位置,有多少位置位置? – MSalters

+0

在一個類中,我有一個方法來設置值,另一個類有獲取值的方法。對於我使用的集合:'Position :: setPos(index,x,y)',並獲得我使用'Position :: getPos(index)'返回Coord。它不起作用。我收到一個錯誤:「未定義的位置::位置參考」 – kande

1

positions是一個與類實例關聯的成員變量,因此不是全局的。您可以通過將其設置爲static來使其與全球類似。這樣做,它將成爲一個類範圍的變量,而不是綁定到一個實例。

您將需要在單個實現文件中定義它。

一個更好的選擇將是有一個std::vector<Coord>

+0

Thanx爲您的答案,但如果我會使數組「靜態」我將無法改變它? – kande

+0

@kande你讓'static'與'const'混淆。 –

+0

ye,right ...對不起... thanx :) – kande

1

正如其他人的建議,你可以讓成員static

您還可以創建Position類的實例作爲一個全局變量,並使用:

Position globalPosition; 

void function_using_position() 
{ 
    globalPosition.setPos(0, 1, 2); 
} 

int main() 
{ 
    function_using_position(); 
} 

或使其局部變量,並圍繞把它作爲一個參考:

void function_using_position(Position &position) 
{ 
    position.setPos(0, 1, 2); 
} 

int main() 
{ 
    Position localPosition; 

    function_using_position(localPosition); 
} 
+0

+1。 「位置」似乎是一個相當可重用的類,所以你可能不希望通過使其變爲「靜態」來削弱它的實用性。通過擁有這個課程的全球可訪問的實例,您可以獲得兩全其美的好處。 – Dennis