CARD& STACK::peek()
{
if(cards.size == 0)
{
CARD temp = CARD {-1, -1};
return temp;
}
return cards.back();
}
这是我遇到麻烦的功能。STACK.peek功能,遇到一些麻烦,C++
CARD
只是一个struct
有两个int
变量,称为rank
和suit
。STACK
是管理std::vector<CARD>
的class
,即cards
。
功能应该一个reference
返回到卡上的堆栈的顶部,或者所述参考返回到虚拟卡若vector
是空的。
首先,我收到一条警告,说明返回了对局部变量temp
的引用。那有什么问题?这将如何影响功能?我该怎么做呢?
其次,我想使用此功能与其他功能我创建了名为cardToString
char* cardToString(CARD& c);
它应该使用rank
和suit
变量传递CARD
查找表中的字符串值,将两个字符串连接在一起,并返回一个指向新字符串的指针。
所以最终的结果是这样的:
cout<<cardToString(deck.peek())<<"\n";
,但此行的代码将执行到cardToString
功能,然后就停止出于某种原因。这让我非常恼火,因为它只是停下来,没有错误信息,而且看起来不像我有什么不妥。
有人可以帮我吗?
编辑:这里是cardToString
功能
char *cardToString(const CARD& c)
{
if(c.r >= 13 || c.r < 0 || c.s >= 4 || c.s < 0)
{
std::cout<<"returned null";
return NULL;
}
char *buffer = new char[32];
strcpy(buffer, RANKS[c.r]);
strcat(buffer, " of ");
return strcat(buffer, SUITS[c.s]);
}
我特别想要的功能STACK.peek()
返回已经存在的STACK
顶部CARD
的地址。这样做似乎更有意义,而不是创建我想要返回的卡的副本。
发布'cardToString'函数可能有助于诊断问题。 – uesp 2011-04-05 23:59:36
按指针返回的值与参考值的比较应该是*语义*的决定。在语义上,通过引用返回没有任何意义,因为可能的返回值之一是,如您标记的那样,是暂时的。 – ildjarn 2011-04-06 00:15:01
@ildjam该类可能包含一个虚拟的'CARD',它返回一个引用(类似于'std :: string :: npos')。 – user470379 2011-04-06 00:58:18