2015-06-05 183 views
1

AGK_Delete.h枚舉不返回值

class AGK_Delete 
{ 
private: 
    enum OBJTYPE { text, button }; 
    OBJTYPE TypeConversion(const char * type); 
}; 

AGK_Delete.cpp

​​3210

我不明白爲什麼即使我傳遞正確的參數,我沒有得到要求的回報率值。正如你在第二段代碼中看到的那樣,我也有一個cout命令給出了輸出:TEXT或者BUTTON(取決於參數)。它仍然不會返回正確的值。我究竟做錯了什麼?

+5

使用C++字符串,而不是

,他們可以* *用''==進行比較。 – Biffen

+0

@Biffen非常不好的建議。爲什麼你只需要爲字符串比較分配內存? –

+3

@ c-smile C字符串不需要內存? C++字符串有很多好處,並且它看起來像OP可以使用它們。 – Biffen

回答

2

嘗試改變AGK_Delete::TypeConversion採取std::string代替const char *

傳遞const char *std::string參數將cretae爲std :: string與傳遞的參數的值。

類的類型可以覆蓋允許==做你認爲你在做什麼的方法,因此std::stringoperator==將比較值。

原生指針將==解釋爲表示在相同的位置。如果您想比較您使用的舊C風格的值,請參閱strcmp。爲了安全起見,您應該使用std::strncmp,並將長度超過可接受值的最大長度1。

text ---> 0x1234 [ABC] 
"ABC" --> 0x2345 [ABC] 

0x1234 != 0x2345strcmp(text, "ABC")比較值使用std::string會做的strcmp相當於代替指針平等

+0

你是否介意解釋它將解決什麼問題? –

+0

std :: string會爲該字符串分配內存,所以會產生副作用。 我建議改變你的答案,並提到需要額外的try/catch。 –

+1

如果沒有記憶,你期望抓到什麼? –

1

我在做什麼錯?

您正在比較兩個字符串的地址,而不是比較它們的內容。

使用strcmp(a,b)

+1

你的意思是strncmp?你也沒有提到檢查空ptr。 –