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

Posted

技术标签:

【中文标题】c++(非内置/类)静态成员【英文标题】:c++ (non-built in/class) static member 【发布时间】:2010-10-15 12:16:27 【问题描述】:
#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;

在这个程序中,启用两个注释行会导致第一行出错。

error C2275: 'std::string' : 非法将此类型用作表达式

我做错了什么?

【问题讨论】:

【参考方案1】:

因为“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;

【讨论】:

【参考方案2】:

错误说明了一切,您正在使用 type std::string 作为要分配的 value

要解决此问题,您可以这样做:

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

或者只是

std::string c1::m1;

【讨论】:

【参考方案3】:
std::string c1::m1 = std::string;

应该是这样的

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

【讨论】:

【参考方案4】:

错误是由于在该行右侧​​使用了std::string - 您正在尝试将 m1 的 value 初始化为 type @987654322 @。

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

【讨论】:

以上是关于c++(非内置/类)静态成员的主要内容,如果未能解决你的问题,请参考以下文章

C++使用模板类调用非静态成员函数

C++ 非静态成员函数的非法调用

C++中类里面定义 静态成员变量的问题

指向任何类类型的非静态成员函数的 C++ 函数指针

C++对象模型:成员变量<一>非静态成员

使用 C++ 的 Array 中的非静态成员引用错误