2015-03-03 83 views
1

constants.h訪問常量變量類型名稱不允許的,從主()

#include <string> 
class constants 
{ 
    static std::string FILE_PATH; 
}; 

constants.cpp

#include "constants.h" 

class constants{ 
public: 
    std::string constants::FILE_PATH = "G:\\TextFile.txt"; 
}; 

的main.cpp

#include "txtFileGenerator.h" 
#include "constants.h" 
int main(){ 
    txtFileGenerator(constants.FILE_PATH); 
} 

您好,上面給出的三個文件,爲什麼不能使用constants.FILE_PATH訪問公共靜態字符串變量?我得到一個「類型名稱不允許」的錯誤。

解決方案:

的main.cpp

#include "txtFileGenerator.h" 
#include "constants.h" 

std::string constants::FILE_PATH = "G:\\TextFile.txt"; 

int main(){ 
    txtFileGenerator(constants::FILE_PATH); 

} 

constants.h

#include <string> 
class constants 
{ 
public: 
    static std::string FILE_PATH; 
}; 
+1

你真的有兩個同名的班嗎? – juanchopanza 2015-03-03 13:00:22

+0

一個叫做constants.h,另一個是constants.cpp – sutoL 2015-03-03 13:00:56

+0

試試'constants :: FILE_PATH'而不是? – matthias 2015-03-03 13:01:25

回答

2

這第一個問題是在這裏:

class constants{ 
public: 
    std::string constants::FILE_PATH = "G:\\TextFile.txt"; 
}; 

這重新定義了類,它是無效。要定義靜態變量,應該只是:

std::string constants::FILE_PATH = "G:\\TextFile.txt"; 

(即沒有封閉類)

你可能還需要一個在public:constants.h

這也是錯誤的:

txtFileGenerator(constants.FILE_PATH); 

要訪問類型爲T的靜態變量,請使用T::x而不是T.x所以應該constants::FILE_PATH

(您使用t.x訪問對象t非靜態成員)

+0

常量:: FILE_PATH「不能在當前作用域中定義,這個新的錯誤發生在main() – sutoL 2015-03-03 13:10:42

+0

@sutoL:這是一個正確的錯誤,Jonathan的答案已經向你展示了它應該被定義的範圍 – MSalters 2015-03-03 13:12:26

+0

so don don不需要實現一個常數。頭文件的cpp聲明? – sutoL 2015-03-03 13:14:27

3

.cpp文件的實施應該僅僅是:

std::string constants::FILE_PATH = "G:\\TextFile.txt"; 

而且不在另一個具有相同名稱的類聲明內。