【问题标题】:I want to create a Vector to hold classes我想创建一个 Vector 来举办课程
【发布时间】:2010-12-09 00:01:18
【问题描述】:

我对制作一个向量来保存课程感到非常困惑。

如果我想将一堆数据保存在一个向量中,如下例所示,那么将数据写入类成员函数,并能够被其他函数调用和使用。

我在哪里粘贴向量声明?请帮忙!

#include <vector>

class Card
{
   public:
    int suit;
    int rank;
    Card::Card(int suit, int rank);
    Function();
};

vector<Card> cards;

int main()
{
}

Card::Function()
{
    for loop...
    Card cardz(i, i);
    cards.push_back(cardz);
} 

【问题讨论】:

  • 周围有很多例子,例如yolinux.com/TUTORIALS/LinuxTutorialC++STL.html
  • @Nikolai N Fetissov 我正在使用 Visio express C++,我不想弄乱 linux,特别是因为我已经很困惑了,不过谢谢!
  • 在 linux 中编程实际上是无限简单和简单的
  • cards 的定义唯一明确错误的是它应该是 std::vector,而不是 vector。您可能想让cards 成为Card 类的静态数据成员,我不确定。此外,您的构造函数Card::Card 应该只是Card,而Function 需要一个返回类型。哪个特定的编译器错误让您感到困扰?
  • @Falmarri 使用 linux 的一切都更容易,我只需要确保它可以在 Windows 上运行

标签: c++ class vector


【解决方案1】:

在我看来,您正在扩展Card 对象应该做的事情的界限。我可以建议以下布局吗?首先定义一个卡。

class Card {
  public:
    Card(int s, int r)
    : suit(s), rank(r)  {
      // Initialize anything else here
    }

  private:
    int suit, rank;
};

接下来,定义一个包含vector 卡片的对象并对其进行操作。我们就叫它Deck

class Deck {
  public:
    Deck();

  private:
    vector <Card> cards;
};

现在,在您的 Deck 类中,您可以根据需要初始化卡片集合。

Deck::Deck() {
  for (int suit = 0; suit < 4; suit++) {
    for (int rank = 0; rank < 13; rank++) {
      cards.push_back(Card(suit, rank));
    }
  }
}

【讨论】:

    【解决方案2】:

    这里有两个简单的选项。更接近你所写的,在头文件中使用extern 声明:

    // something.h
    extern vector<Card> cards;
    
    // something.cpp
    vector<Card> cards;
    

    或者,如果此向量“属于”class Card(但仍然只有其中一个)有意义,您可以将其设为 static 成员:

    // Card.h
    class Card {
      // ...
      static void init_cards();
      static vector<Card> cards;
    };
    
    // Card.cpp
    vector<Card> Card::cards;
    

    static 成员可以像任何其他成员一样是 publicprivate。如果是public,任何不在使用cardsCard 方法中的代码都必须调用它Card::cards

    无论哪种方式,您都必须弄清楚如何使用您想要的内容对其进行初始化......

    【讨论】:

    • 需要了解向量可能对其包含的项目执行哪些操作——尤其是复制。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-14
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    相关资源
    最近更新 更多