我对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;
}
但我得到了: IntelliSense:不允许使用数据成员初始化程序
答案 0 :(得分:16)
您需要稍后执行初始化;你不能在类定义中初始化类成员。 (如果可以的话,那么在头文件中定义的类会导致每个翻译单元定义他们自己的成员副本,让链接器弄得一团糟。)
class Class {
public:
static string arr[];
};
string Class::arr[3] = {"one", "two", "three"};
类定义定义接口,它与实现分开。
答案 1 :(得分:2)
您必须初始化类外的静态成员,就好像它是一个全局变量一样,如下所示:
class Class {
public:
static string arr[3];
};
string Class::arr = {"one", "two", "three"};
答案 2 :(得分:1)
只能在类定义中初始化静态整数类型的数据成员。您的静态数据成员的类型为string
,因此无法内联初始化。
您必须在类定义之外定义 arr
,并在那里初始化它。您应该在课程后从声明和以下内容中删除初始化程序:
string Class::arr[3] = {"one", "two", "three"};
如果您的类是在头文件中定义的,那么它的静态数据成员应该只在一个源(.cpp)文件中定义。
另请注意,并非Visual Studio中错误列表中出现的所有错误都是构建错误。值得注意的是,以“IntelliSense:”开头的错误是IntelliSense检测到的错误。 IntelliSense和编译器并不总是一致。
答案 3 :(得分:0)
您必须在类声明之外初始化静态成员:
string Class::arr[3] = {"one", "two", "three"};