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