2013-10-02 93 views
3

所以在我的命名空間中的.h文件中,我有命名全局變量貶值(C++)

namespace wtvr{ 
    static Matrix m; 
    void LoadIdentity(void); 
}; 

,並在其.cpp文件,我有

namespace wtvr{ 
    void LoadIdentity(void){ 
     m = Identity(); 
     m.display();// trace for debugging 
    } 
}; 

其他地方在主程序

wtvr::LoadIdentity(); 
wtvr::m.display(); 

第一顯示()打印的單位矩陣在屏幕從LoadIdentity()函數中,但第二個,其爲t之後他功能返回,顯示全零。 爲什麼我的價值觀消失了? 有沒有另外一種方法讓我的全球化? 謝謝

回答

5

你已經宣佈在頭文件static Matrix m;。這意味着每個包含該頭文件的.cpp文件都將獲得它自己的版本m。而不是你需要使它成爲一個全局的(儘管命名空間範圍的)變量。

在頭文件:

namespace wtvr{ 
extern Matrix m; 
}; 

在任何.cpp文件中:

namespace wtvr{ 
Matrix m; 
}; 
+0

如果我們想用一個值進行初始化,該怎麼辦?只需在上面的cpp文件定義中指定它? – sree

2

您已聲明變量爲static,這意味着每個翻譯單元(.cpp文件)都有其自己的副本。你大概意思是:

.h文件中:

namespace wtvr{ 

extern Matrix m; //declare for use from everywhere 
void LoadIdentity(void); 

} 

.cpp文件:

namespace wtvr{ 

Matrix m; //define in exactly one .cpp file 

void LoadIdentity(void) 
{ 
    m = Identity(); 
    m.display();// trace for debugging 
} 

} 
1

是的,有你應該讓你的世界的不同方式。

在.h文件:

extern Matrix m; 

在其.cpp文件:

Matrix m; 
void LoadIdentity(void) 
{ 
    m = Identity(); 
    m.display(); 
} 

沒有其他文件需要改變。文件範圍中的static表示每個文件都獲得自己的與該變量的其他文件副本沒有鏈接的變量副本,這與您想要的相反。