2010-10-15 2 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; 
} 

Dans ce programme, l'activation des deux lignes remarquées provoque une erreur sur le premier.membre statique C++ (non intégré/classe)

erreur C2275: 'std :: string': utilisation illégale de ce type comme une expression

Qu'est-ce que je fais mal?

Répondre

3

L'erreur dit tout, vous utilisez le type std::string que la valeur à attribuer.

Pour résoudre ce problème, vous pouvez faire:

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

ou tout simplement

std::string c1::m1; 
1

L'erreur est due à l'utilisation de droite de std::string sur cette ligne - vous essayez d'initialiser la valeur de m1 du type std::string.

Vous devriez trouver qu'une ligne comme std::string c1::m1 = "Wee - a string!"; fonctionnera.

+0

me battre de 18 secondes :) –

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

devrait être quelque chose comme

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

Parce que "std :: string" est un type, pas une valeur. Voici un exemple qui pourrait rendre plus évidente:

#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: J'aime beaucoup votre comparaison évidente! –

Questions connexes