Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;不允许使用数据成员初始值设定项 对C++我完全陌生,所以请容忍我。我想用一个静态数组创建一个类,并从main访问这个数组。以下是我想在C#中做的事情_C++_Arrays - Fatal编程技术网

C++;不允许使用数据成员初始值设定项 对C++我完全陌生,所以请容忍我。我想用一个静态数组创建一个类,并从main访问这个数组。以下是我想在C#中做的事情

C++;不允许使用数据成员初始值设定项 对C++我完全陌生,所以请容忍我。我想用一个静态数组创建一个类,并从main访问这个数组。以下是我想在C#中做的事情,c++,arrays,C++,Arrays,以下是我尝试过的: // 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", "t

以下是我尝试过的:

// 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;
}
//just傻瓜in.cpp:定义控制台应用程序的入口点。
//
#包括“stdafx.h”
#包括
#包括
使用名称空间std;
班级{
公众:
静态字符串arr[3]={“一”、“二”、“三”};
};
int _tmain(int argc,_TCHAR*argv[]
{
x类;

cout您需要稍后执行初始化;您不能在类定义中初始化类成员。(如果可以,则头文件中定义的类将导致每个翻译单元定义自己的成员副本,从而使链接器陷入混乱。)


类定义定义了接口,接口与实现是分开的。

类定义中只能初始化静态整型数据成员。静态数据成员的类型为
string
,因此不能内联初始化

您必须在类定义之外定义
arr
,并在那里初始化它。您应该从声明中删除初始值设定项,并在类之后删除以下内容:

string Class::arr[3] = {"one", "two", "three"};
如果类是在头文件中定义的,那么它的静态数据成员应该在一个源(.cpp)文件中定义


还请注意,并非Visual Studio中错误列表中出现的所有错误都是生成错误。值得注意的是,以“IntelliSense:”开头的错误是IntelliSense检测到的错误。IntelliSense和编译器并不总是一致的。

您必须在类声明之外初始化静态成员:

string Class::arr[3] = {"one", "two", "three"};

必须在类之外初始化静态成员,就像它是一个全局变量一样,如下所示:

class Class { 

  public: 
      static string arr[3];
}; 

string Class::arr = {"one", "two", "three"}; 

具有整数类型的静态数据成员可以在C++03中进行内联初始化,但如果要将其用作对象,则仍然必须对其进行定义数据成员可以在C++ 11中初始化为内联,尽管Visual C++还不支持这个特性。我认为C++ 11不会改变静态数据成员,只是实例数据成员。当编译构造函数时,编译器中已经看到的任何先前初始化的实例成员在构造函数中隐式初始化。默认值为SEED的ctor。对于静态成员来说,没有什么魔法可以让它起作用;必须在某些转换单元中发出符号。您是正确的。我的第二句话应该以“大多数非静态数据成员”开头抱歉造成混淆。谢谢,我不知道这一点。还有一件事:现在我得到了一个警告C4101:“x”:未引用的局部变量。虽然x在cout中使用,因为您正在访问
类的静态成员
:如果您使用命名空间std编写
cout No me gusta
仅添加静态常量整型数据成员n不能在类内初始化。仅静态常量整型数据,而不是静态整型数据成员。
string Class::arr[3] = {"one", "two", "three"};
class Class { 

  public: 
      static string arr[3];
}; 

string Class::arr = {"one", "two", "three"};