【发布时间】:2023-03-23 10:20:02
【问题描述】:
CARD& STACK::peek()
{
if(cards.size == 0)
{
CARD temp = CARD {-1, -1};
return temp;
}
return cards.back();
}
这是我遇到问题的功能。
CARD只是一个带有两个int变量的struct,分别称为rank和suit。STACK是一个管理std::vector<CARD>的class,称为cards。
该函数应该将reference 返回到堆栈顶部的卡片,或者如果vector 为空,则返回对虚拟卡片的引用。
首先,我收到一条警告,指出返回了对局部变量 temp 的引用。那有什么问题?这将如何影响功能?我该怎么办?
其次,我正在尝试将此函数与我创建的另一个名为cardToString的函数一起使用
char* cardToString(CARD& c);
它应该使用传递的CARD 中的rank 和suit 变量来查找表中的字符串值,将两个字符串连接在一起,并返回一个指向新字符串的指针。
所以最终结果是这样的:
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() 返回CARD 的地址,该地址已经存在于STACK 的顶部。这样做似乎比创建我要归还的卡的副本更有意义。
【问题讨论】:
-
发布您的
cardToString函数可能有助于诊断问题。 -
按值返回还是按引用返回还是按指针返回应该是语义的决定。从语义上讲,通过引用返回没有任何意义,因为其中一个可能的返回值,正如您所标记的那样,是临时的。
-
@ildjam 该类可能包含一个虚拟的
CARD,它返回一个引用(类似于std::string::npos)。
标签: c++ class function struct tostring