C++构造函数错误.无法初始化字符串数组

use*_*514 1 c++ arrays constructor initialization

为什么不能在我的构造函数中初始化我的字符串数组?我收到以下错误:内部编译器错误:分段错误|

在构造函数中的这两行:suit = {"Clubs","Diamonds","Hearts","Spades"}; denominations = {"Ace","2","3","4","5","6","7","8","9","10","Jack","Queen" ,"王"};

class Card
    {
      public:
        Card(int n);
        Card(string d, string s);
        int getNumber();
        string getDenomination();
        string getSuit();
        void setNumber(int n);
        void setDenomination(string d);
        void setSuit(string s);
        void printMe();
        void compareMe(Card c);

      private:
        int number;
        string denomiation;
        string suit;
        string suits [4];
        string denominations [13];
    };


    Card::Card(int n)
    {
        suits = {"Clubs", "Diamonds", "Hearts", "Spades"};
        denominations = {"Ace","2","3","4","5","6","7","8","9","10","Jack","Queen","King"};

        int denIndex, suitIndex;

        denIndex = 51 % 13;
        suitIndex = 51 / 13;

        number = n;
        denomiation = denominations[denIndex];
        suit = suits[suitIndex];

    }
Run Code Online (Sandbox Code Playgroud)

Fra*_*ack 5

从您发布的代码中,我认为那些menbers suits并且denominations应该是静态数据成员,也就是说它们将始终为每个Card实例提供相同的数据.

所以我建议你将它们设置为静态并在cpp文件的文件范围内初始化它们(在类声明之外):

宣言:

class Card
{
  public:
    Card(int n);
    Card(string d, string s);
    int getNumber();
    string getDenomination();
    string getSuit();
    void setNumber(int n);
    void setDenomination(string d);
    void setSuit(string s);
    void printMe();
    void compareMe(Card c);

  private:
    int number;
    string denomiation;
    string suit;
    static const string suits [4];                 // static const
    static const string denominations [13];        // static const
};
Run Code Online (Sandbox Code Playgroud)

定义:

const string Card::suits[4] = {"Clubs", "Diamonds", "Hearts", "Spades"};
const string Card::denominations[13] = {"Ace","2","3","4","5","6","7","8","9","10","Jack","Queen","King"};
Run Code Online (Sandbox Code Playgroud)

编辑: 正如Robert S. Barnes所说,制作它们static const会更好.

希望有所帮助.