2010-10-15 91 views
1
#include <iostream> 
#include <string> 

class c1 
{ 
public: 
    static std::string m1; 
    static unsigned int m2; 
}; 

//std::string c1::m1 = std::string; 
unsigned int c1::m2 = 0; 

void main() 
{ 
c1 a; 
//std::cout<<a.m1<<std::endl; 
std::cout<<a.m2<<std::endl; 
} 

在這種程序,使兩個陳述線導致在第一錯誤。C++(非內置/類)靜態成員

錯誤C2275: '的std :: string':非法使用這種類型作爲表達

我在做什麼錯?

回答

3

錯誤說,這一切,您使用的是std::string進行分配。

爲了解決這個問題,你可以這樣做:

std::string c1::m1 = std::string(); 
           ^^ 

或只是

std::string c1::m1; 
1

的錯誤是由於該行右手使用std::string - 你試圖M1的初始化到類型std::string

你應該發現像std::string c1::m1 = "Wee - a string!";這樣的行會起作用。

+0

通過18秒:) – 2010-10-15 12:23:40

2
std::string c1::m1 = std::string; 

應該像

std::string c1::m1 = ""; 
4

因爲 「的std :: string」 是一個類型,而不是一個值。下面是一個例子,可能使這更明顯:

#include <iostream> 
#include <string> 

class c1 
{ 
public: 
    static unsigned int m2; 
}; 

unsigned int c1::m2 = int; // error: int is a type, not a value 

void main() 
{ 
    c1 a; 
    std::cout<<a.m2<<std::endl; 
} 
+0

+1打我:我很喜歡你的明顯對比! – 2010-10-15 12:36:52