#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': недопустимое использование этого типа в качестве выражения
Что я делаю не так?
Потому что "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; }
Ошибка говорит сама за себя, вы используете тип std::string в качестве значения , которое будет назначено.
std::string
Чтобы исправить это, вы можете сделать:
std::string c1::m1 = std::string(); ^^
или просто
std::string c1::m1;
std::string c1::m1 = std::string;
должно быть что-то вроде
std::string c1::m1 = "";
Ошибка из-за правого использования std::string в этой строке - вы пытаетесь инициализировать значение m1 для типа std::string.
Вы должны обнаружить, что строка типа std::string c1::m1 = "Wee - a string!"; будет работать.
std::string c1::m1 = "Wee - a string!";