【问题标题】:How to initialize an array that is a member of a class?如何初始化作为类成员的数组?
【发布时间】:2011-05-08 20:22:09
【问题描述】:

例如,我有一个名为 DeckOfCards 的类和数组 char *suit[ 4 ]。

class DeckOfCards
{
public:
    // some stuff

private:
    char *suit[ 4 ];
};

我可以在哪里以这种方式初始化这个数组? char *suit[ 4 ] = { "Hearts", "Diamonds", "Clubs", "Spades" }我猜可以使用构造函数来完成,但我不知道具体怎么做。

【问题讨论】:

    标签: c++ arrays class


    【解决方案1】:

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

    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 数组复制到另一个数组。
    • 我不明白静态数组与以后无法复制值有什么关系。
    • 抱歉,我弄糊涂了。我将尝试将其创建为静态变量。
    • 无论如何,我只是试图将一个元素从 const char suit* 复制到另一个 char*(非常量)数组,如下所示:dealedSuits[ dealedFcounter ] = suit[ row ]; 和 MSVC++ 向我显示了一个错误,即 @987654326 类型的值@ 不能分配给char*
    【解决方案2】:

    试试这个:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-22
      相关资源
      最近更新 更多