Поместить объект класса внутри вектора? - PullRequest
0 голосов
/ 08 декабря 2010

Я заметил, что могу разместить класс внутри вектора; Вот моя программа, где я получаю следующую ошибку:

/out:blackjack.exe
blackjack.obj
blackjack.obj : error LNK2019: unresolved external symbol "private: static class
 std::vector<class Card,class std::allocator<class Card> > Card::Cards" (?Cards@
Card@@0V?$vector@VCard@@V?$allocator@VCard@@@std@@@std@@A) referenced in functio
n "public: static void __cdecl Card::blankCard(void)" (?blankCard@Card@@SAXXZ)
blackjack.exe : fatal error LNK1120: 1 unresolved externals

Проблема связана с функцией blankcard (), где я пытаюсь создать новый экземпляр класса и поместить его в вектор.

Может кто-нибудь, пожалуйста, прочитайте код, скажите мне мою проблему и приведите хороший пример того, как это сделать? Спасибо.

#include <iostream>
#include <vector>
#include <string>
using namespace std;

class Card
{
  private:
    string suit;
    int number;
    static vector<Card> Cards;

  public:
    Card::Card();
    Card::Card(string cardS, int cardV);
    static void createCards(); 
    static void blankCard();    
};


int main()
{
  Card::blankCard();
  return 0;
}

Card::Card(){};
Card::Card(string cardS, int cardV){};

void Card::blankCard()
{
   int temp = 1;
   int cardValue; 
   string suit;
   int suitCount = 1;

   for(int i = 1; i < 52; i++)
   {
     if(temp == 1 || temp > 13)
     {
       temp = 1;
       cardValue = temp;
       temp ++;
     }
     else if(temp > 1)
     { 
       cardValue = temp;
       temp ++;
     }

     if(suitCount <= 13)
     {
       suit = "spade";
       suitCount++;
     }
     else if( suitCount >= 14 && suitCount <= 26)
     {
       suit = "club";
       suitCount++;
     }
     else if(suitCount >= 27 && suitCount <= 39)
     {
       suit = "heart";
       suitCount++;
     }
     else if(suitCount >= 40 && suitCount <= 52)  
     {
       suit = "diamonds";
       suitCount++;
     }     

     Card a = Card(suit, cardValue);
     Cards.push_back(a);
   }
}

Ответы [ 4 ]

7 голосов
/ 08 декабря 2010

Вы объявляете статический член Cards внутри определения класса, но нигде не определяете его.Добавьте определение после определения класса:

vector<Card> Card::Cards;
2 голосов
/ 08 декабря 2010

Вам нужно будет создать экземпляр вектора где-то, поскольку он статический.По сути, вы хотите что-то вроде:

std::vector<Card> Card::Cards;

где-то в вашем коде.

1 голос
/ 08 декабря 2010

Вы должны фактически объявить свой вектор.

1 голос
/ 08 декабря 2010

Вектор ваших карт определен как статический.Это означает, что это фактически глобальная переменная, которую вы должны определить.Это можно сделать, поставив следующее после определения класса Card:

std::vector<Card> Card::Cards();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...