不允许使用C++数据成员初始值设定项
C++ data member initializer is not allowed
我对C++完全陌生,所以请耐心等待。我想创建一个带有静态数组的类,并从main访问该数组。这是我想在 C# 中做的事情。
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Class a = new Class();
Console.WriteLine(a.arr[1]);
}
}
}
=====================
namespace ConsoleApplication1
{
class Class
{
public static string[] s_strHands = new string[]{"one","two","three"};
}
}
这是我尝试过的:
// justfoolin.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;
class Class {
public:
static string arr[3] = {"one", "two", "three"};
};
int _tmain(int argc, _TCHAR* argv[])
{
Class x;
cout << x.arr[2] << endl;
return 0;
}
但我得到了:智能感知:不允许使用数据成员初始值设定项
稍后需要执行初始化;不能在类定义中初始化类成员。 (如果可以的话,那么头文件中定义的类将导致每个翻译单元定义自己的成员副本,从而使链接器需要整理一团糟。
class Class {
public:
static string arr[];
};
string Class::arr[3] = {"one", "two", "three"};
类定义定义接口,该接口独立于实现。
您必须初始化类外部的静态成员,就好像它是一个全局变量一样,如下所示:
class Class {
public:
static string arr[3];
};
string Class::arr = {"one", "two", "three"};
在类定义中只能初始化静态的整数类型的数据成员。 静态数据成员的类型为 string
,因此无法内联初始化。
必须在类定义之外定义arr
,并在类定义之外对其进行初始化。 应从声明中删除初始值设定项,并在类之后删除以下内容:
string Class::arr[3] = {"one", "two", "three"};
如果类是在头文件中定义的,则其静态数据成员应只在一个源 (.cpp) 文件中定义。
另请注意,并非 Visual Studio 中的"错误列表"中显示的所有错误都是生成错误。 值得注意的是,以"智能感知:"开头的错误是智能感知检测到的错误。 智能感知和编译器并不总是一致的。
您必须在
类声明之外初始化静态成员:
string Class::arr[3] = {"one", "two", "three"};
相关文章:
- 用于访问容器<T>数据成员的正确 API
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 数据成员SFINAE的C++17测试:gcc vs clang
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 如何在c++中定义以struct为数据成员的类中的构造函数
- 静态数据成员模板专用化的实例化点在哪里
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 使用指针访问数组中的对象数据成员
- 友元函数无法访问私有数据成员 (c++)
- 我可以在 C++ 中将数据成员/变量从其定义之外添加到结构中吗?
- 为什么将一个结构的引用设置为等于另一个结构只会更改一个数据成员?
- 将私有数据成员添加到野牛生成的类中
- 输入数据成员未按要求工作
- 二维矢量数据成员
- 在类 A 中创建类型为 B 类的向量 - 访问数据 [C++] [成员在两个类中都是私有的]
- 调用在 HXX 文件中声明的静态数据成员
- 是否可以根据其数据成员的类型确定类型的大小
- 访问数据成员(本身是对象)的数据成员,就好像它们是类成员一样
- 使公共数据成员在C++中无法访问
- 从 XML 中读取未指定结构的每个数据成员