c ++ (не встроенный в / класс) статический член - PullRequest
1 голос
/ 15 октября 2010
#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;
}

В этой программе включение двух отмеченных строк приводит к ошибке на первой.

ошибка C2275: 'std :: string': недопустимое использование этого типа в качестве выражения

Что я делаю не так?

Ответы [ 4 ]

4 голосов
/ 15 октября 2010

Потому что "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;
}
3 голосов
/ 15 октября 2010

Ошибка говорит сама за себя, вы используете тип std::string в качестве значения , которое будет назначено.

Чтобы исправить это, вы можете сделать:

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

или просто

std::string c1::m1;
2 голосов
/ 15 октября 2010
std::string c1::m1 = std::string;

должно быть что-то вроде

std::string c1::m1 = "";
1 голос
/ 15 октября 2010

Ошибка из-за правого использования std::string в этой строке - вы пытаетесь инициализировать значение m1 для типа std::string.

Вы должны обнаружить, что строка типа std::string c1::m1 = "Wee - a string!"; будет работать.

...