我不确定如何命名这个问题。这可能是一个noob问题,但无论如何......我现在不是真的为什么在C ++中struct
中赋值可以在Linux(Ubuntu)中工作但在Windows中不起作用(我收到错误编译) Windows中的相同程序)
这取决于编译器,是吗?或者还有其他我应该知道的东西?
#include <iostream>
#include <fstream>
const char data[] = "data.txt";
const char result[] = "data_result.txt";
const int Cn = 10;
struct Players{
/*Assigning values in struct does not work in windows */
int Health = 100;
int Mana = 120;
int Experience = 0;
};
struct Players Player[Cn];
int main(){
return 0;
}
答案 0 :(得分:4)
在C ++中为结构或类分配“默认”值是一个只在C ++ 11中成为一种东西的功能。因此,可以说你的Windows编译器不支持C ++ 11,或者没有接收到正确的编译参数来使用C ++ 11进行编译。
答案 1 :(得分:2)
您的问题是&#34;我可以在哪些C ++编译器中为结构变量指定值&#34;。
我的答案是&#34;来自所有编译c ++编译器,符合c ++ 98 forward&#34;。所有允许初始化struct数据属性。
以下工作即使我设置了编译器选项std = c ++ 98
它的作用是避免使用C ++ 11功能,并将数据属性初始化移动到用户定义的默认ctor中。
struct Players
{
int Health;
int Mana;
int Experience;
Players() : Health(100), Mana(120), Experience(0)
{
}
// an array of Cn Players will build Cn copies,
// all initialized to these same 3 values of the default ctor.
};
是的,您的代码结构确实有一个编译器提供的ctor(以及一些其他方法属性。)
是的,我想你真的不想使用c ++ 98。
更新
以下是另一个默认的ctor,虽然看起来可能不像。
struct Players
{
int Health;
int Mana;
int Experience;
Players(int aHealth=100, int aMana=120, int anExperiance=0) :
Health(aHealth), Mana(aMana), Experience(anExperience)
{
}
};
这是默认的ctor,因为你可以调用它作为&#34;玩家玩家();&#34;,并且所有方法默认都适用。
您可以使用&#34; = delete来控制编译器为struct / class提供的内容。&#34;言。
您可以命令编译器不提供
的方法 // coding standard: disallow when not used
T(void) = delete; // default ctor (1)
~T(void) = delete; // default dtor (2)
T(const T&) = delete; // copy ctor (3)
T& operator= (const T&) = delete; // copy assignment (4)
T(const T&&) = delete; // move ctor (5)
T& operator= (const T&&) = delete; // move assignment (6)
只需替换你的班级名称(即玩家)
请记住,当您不想使用其中一种方法时,您不允许。如果您提供编译器提供方法的替代方法,请不要禁止。