如何初始化一个作为类成员的数组?

3
例如,我有一个名为DeckOfCards的类和一个char *suit[4]数组。
class DeckOfCards
{
public:
    // some stuff

private:
    char *suit[ 4 ];
};

我应该在哪里这样初始化数组?char *suit[ 4 ] = { "红桃", "方块", "梅花", "黑桃" } 我猜可以使用构造函数来完成,但我不知道具体怎么做。

2个回答

5

试试这个:

DeckOfCards::DeckOfCards()
    :suit{ "Hearts", "Diamonds", "Clubs", "Spades" }
{}

如果这样不起作用,那么您的编译器还不支持C++的这个特性。因此,您需要按照旧的方式进行操作:
DeckOfCards::DeckOfCards()    
{
    suit[0] = "Hearts";
    suit[1] = "Diamonds";
    suit[2] = "Clubs";
    suit[3] = "Spades";
}

如果你要像这样使用char指针,那么你应该将它们定义为const,即:

const char *suit[ 4 ];

原因是,您无法修改字符串,因为字符串文字存储在只读内存中。通过将其声明为const,至少编译器会在尝试修改时向您报告问题。最好避免所有这些,并只使用std::string


5

您可以将其创建为类中的静态变量,如下所示:

class DeckOfCards
{
public:
  DeckOfCards() {
    printf("%s\n", suit[0]);
  }

private:
  static const char *suit[];
};

const char *DeckOfCards::suit[] = { "Hearts", "Diamonds", "Clubs", "Spades" };

int main(void)
{
  DeckOfCards deck;
  return 0;
}

我不能将它创建为静态变量,因为在该类的某些函数中,我会从 suit 数组复制元素到另一个数组。 - Alex
我不明白拥有静态数组与以后无法复制值有什么关系。 - joce
抱歉,我搞混了。我会尝试将其创建为静态变量。 - Alex
无论如何,我刚刚尝试将const char suit*中的一个元素复制到另一个char*(非常量)数组中,就像这样:dealedSuits[ dealedFcounter ] = suit[ row ]; 但是MSVC++向我显示了一个错误,指出不能将类型为const char*的值分配给char* - Alex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接