2010-09-18 70 views
1

我在這一行獲得編譯錯誤:「轉換無效」 錯誤與條件運算符

cout << (MenuItems[i].Checkbox ? (MenuItems[i].Value ? txt::mn_yes : txt::mn_no) : MenuItems[i].Value) 

錯誤:

menu.cpp|68|error: invalid conversion from 'int' to 'const char*' 
menu.cpp|68|error: initializing argument 1 of 'std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]' 

的MenuItems是的std ::下面的類的載體:

class CMenuItem 
{ 
public: 
string Name; 
int Value; 
int MinValue, MaxValue; 
bool Checkbox; 
CMenuItem (string, int, int, int); 
CMenuItem (string, bool); 
}; 

mn_yes和mn_no是std :: strings。

編譯器是MinGW(與code :: blocks分發的版本)。

+1

請爲您的帖子指定更多信息標題。 – 2010-09-18 21:47:54

回答

6

兩個可能的條件值必須轉換爲一個通用類型。問題是,外部條件的左邊:

(MenuItems[i].Value ? txt::mn_yes : txt::mn_no) 

始終是一個string,但是正確的:

MenuItems[i].Value 

是一個int。它試圖通過去const char * - >string找到一種方法,但它不會允許intconst char *轉換(這是好事,因爲它將是沒有意義的)。只要:

if(MenuItems[i].Checkbox) 
{ 
    cout << (MenuItems[i].Value ? txt::mn_yes : txt::mn_no); 
} 
else 
{ 
    cout << MenuItems[i].Value; 
} 

或類似的。

+1

+1 - 我會將* convertible * **添加到常見類型**。 – 2010-09-18 21:49:56

+0

@比利,謝謝。 – 2010-09-18 21:51:10

+0

我只是補充說,'operator <<'的不同重載是完全獨立的函數。一個特定的函數調用只能引用C++中的單個函數(或一組虛擬覆蓋)。 – Potatoswatter 2010-09-18 21:58:02