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"; 

而且不在另一个具有相同名称的类声明内。

相关问题