在哪些C ++编译器中,我可以为结构变量赋值?

时间:2016-03-18 16:57:51

标签: c++ linux windows compiler-errors

我不确定如何命名这个问题。这可能是一个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;
}

2 个答案:

答案 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)

只需替换你的班级名称(即玩家)

请记住,当您不想使用其中一种方法时,您不允许。如果您提供编译器提供方法的替代方法,请不要禁止。