c ++(非内置/类)静态成员

时间:2010-10-15 12:16:27

标签: c++ class static member

#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 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:3)

错误说明一切,您使用类型 std::string作为进行分配。

要解决此问题,您可以执行以下操作:

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

或只是

std::string c1::m1;

答案 2 :(得分:2)

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

应该是

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

答案 3 :(得分:1)

错误是由于在该行右侧​​使用std::string - 您尝试将m1的初始化为类型 std::string

您应该会发现像std::string c1::m1 = "Wee - a string!";这样的行可以使用。