首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指向对象指针的动态数组的指针

指向对象指针的动态数组的指针
EN

Stack Overflow用户
提问于 2012-02-18 11:23:37
回答 1查看 16.4K关注 0票数 1

卡片类表头

代码语言:javascript
复制
class card {

public: 

string rtn_suit() { return suit; }
int rtn_rank()    { return rank; }
void set_suit(string new_suit){ suit = new_suit; }
void set_rank(int new_rank) { rank = new_rank; }

card();
card(string suit, int rank);
card(const card& copyCARD);
~card();

private:
string suit;
int rank;

};

#endif

card.cpp

代码语言:javascript
复制
#include "card.h"
card::card()
{
set_suit("default");
set_rank(0);
}
card::card(string new_suit, int new_rank)
{
// allows for using private class member variables
set_suit(new_suit); // can be anything (string)
set_rank(new_rank); // anticipating simple number ranking (int) 
}

card::~card() {}

卡片类标题

代码语言:javascript
复制
class deck {

public:

static const int default_cap = 52;

void addCard(card *new_card);

deck & operator=(const deck &sourceDECK);

void deckPrint();

// ----------------------------------------------------

deck(int init_cap = default_cap);
deck(const deck& sourceDECK);
~deck(){ delete [] decklist ; }


private:
card *decklist;
int used;
int capacity;

};

#endif

卡片级

代码语言:javascript
复制
 deck::deck(int init_cap)
 {
card **decklist = new card*[init_cap];

 for(int i=0;i<init_cap;i++)
  {
      decklist[i]=new card;
  }

capacity = init_cap;
used=0;
}

deck::deck(const deck& sourceDECK)
{
card **newDECK;

if (capacity != sourceDECK.capacity)
{

    newDECK = new card*[sourceDECK.capacity];

    for(int i=0;i<sourceDECK.capacity;i++)   {   newDECK[i]=new card();  }

    decklist = /*reinterpret_cast<card*>(*/newDECK/*)*/;

    capacity = sourceDECK.capacity;
}

used = sourceDECK.used;
copy(sourceDECK.decklist, sourceDECK.decklist+ used, decklist);

}
deck& deck::operator= (const deck& sourceDECK)
{
if (this == &sourceDECK)

    return *this;


card ** newDECK;
if (capacity != sourceDECK.capacity)
{
    newDECK = new card*[sourceDECK.capacity];

    for(int i=0;i<sourceDECK.capacity;i++)   {   newDECK[i]=new card();   }
    for (int i=0; i<capacity; i++)           {   delete     &decklist[i];     }
    delete [ ] decklist; 
    decklist = /*reinterpret_cast<card*>(*/newDECK/*)*/;
    capacity = sourceDECK.capacity;
}

// Copy the data from the source array:

used = sourceDECK.used;
copy(sourceDECK.decklist, sourceDECK.decklist + used, decklist);

return *this;
}


void deck::addCard(card* new_card)
{
//------- Not using vectors----
//deckList.push_back(new_card);
//cout << "Card added."<<endl;

decklist[used] = new_card;

//decklist[used].set_rank(new_card->rtn_rank());

//decklist[used].set_suit(new_card->rtn_suit());

++used;

cout << "Card added."<<endl;
  }

void deck::deckPrint()
 {
if ( capacity > 0 ) 
{
for(int i = 0; i < capacity; i++)
             {
               cout << "----------"<<endl;
               cout << decklist[i].rtn_rank() << " ";
               cout << decklist[i].rtn_suit() << endl;
               cout << "----------"<<endl;
             }
}
else\
{
    cout << "There are no cards in the deck."<<endl;
}
 }

最后是main()

代码语言:javascript
复制
int main ()
{
string new_suit, del_suit;
int new_rank, del_rank;

deck newDeck;

card *temp_card;


            cout<<"Enter the card's suit: ";
            cin>>new_suit;
            cout<<endl<<"Enter the card's rank: ";
            cin>>new_rank;

            cin.clear();
            cin.ignore(1000, '\n');


        temp_card = new card(new_suit, new_rank);

        newDeck.addCard(temp_card);


        newDeck.deckPrint();


return 0;

}

在某个地方,不知何故,我没有正确初始化或分配。也可能是我搞砸了指针...

由于以下原因,将不会进行编译:

错误卡片:二进制'=‘:未找到采用’C2679 *‘类型的右操作数的运算符(或没有可接受的转换)\projects\cards\ card \Cardd.h(27):尝试匹配参数列表'( card,card*)时,可能为'card &card::operator =(const card &)’

如果我使用(当前已注释掉)“更深的副本”,也就是:

代码语言:javascript
复制
decklist[used].set_rank(new_card->rtn_rnk());

它将在deckPrint()中抛出错误。

我最初为一个简单的卡片类实现编写了这个向量,然后我们开始学习动态数组-我有了一个聪明的想法,尝试在混合中抛出指针。再说一次,这不是家庭作业--这是为了个人成长。

如果有我错过的教程,它清楚地勾勒出我正在尝试做的事情,请随时指点我-我已经在这里倾注了排名前30的谷歌结果和大量的帖子。一半的时间人们推荐使用向量,这也不是我的目标。

感谢您的时间,我知道这是冗长的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-18 12:27:09

我认为您的卡片类构造函数中有一个小错误。

代码语言:javascript
复制
deck::deck(int init_cap)
{
    card **decklist = new card*[init_cap];

    for(int i=0;i<init_cap;i++)
    {
        decklist[i]=new card;
    }
}

这里card **decklist是一个指向指针的新指针,我猜你想要初始化私有变量decklist。

因此,您可以将其更改为

代码语言:javascript
复制
deck::deck(int init_cap)
{
    decklist = new card*[init_cap];

decklist这里是私有变量。

并更改声明

代码语言:javascript
复制
private:
   card **cardlist;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9338228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档