2016-03-07 89 views
0

我試圖存儲正確的票據變量(t1或t2)到t3,所以我可以返回到主。當我使用「=」來設置t1到t3時,它會顯示「no viable overloaded'='」。以下是我的代碼:沒有可行的重載'='錯誤C++

using namespace std; 

class ticket 
{ 
public: 
    ticket(); 
    double input(); 
    double output(); 
    friend ticket operator *(const ticket &t1, const ticket &t2); 
    friend ticket operator /(const ticket &t1, const ticket &t2); 
private: 
    void cost(); 
    string name; 
    double miles, price; 
    int transfers; 
}; 
+1

請編輯您的問題,包括*完整*錯誤輸出,完整,未經編輯和任何信息說明(海灣合作委員會/鏗鏘應該給一些,顯示你有什麼和它的預期)。還顯示導致錯誤的代碼,包括所有涉及變量的聲明/定義和初始化。 –

+1

將問題減少到**最小但完整的例子,讀者可以嘗試。順便說一句,(1)你真的不需要在'character'類型中反映UTF-8編碼的結構,這是不必要的複雜性,(2)只需使用'std :: vector'來管理存儲。或者,(3)簡單的方法是定義'enum character:Byte {}',定義一個'char_traits',並使用'std :: basic_string'專業化。 –

+0

'struct character'並不是做任何你想做的事情的最佳方式。實際上,這會導致標準C++中的未定義行爲(您可能只會讀取與上次寫入相同的工會成員 - 您無法寫入一個成員並讀取另一個成員,或將某些數據轉換爲聯合類型)。即使使用聯合別名編譯器擴展,也不能依賴位域的順序。 –

回答

1

可變c1和字面'\0'char型的,而不是character結構的實例。

charcharacter類型是完全無關的,你不能簡單地在兩者之間進行轉換。

一個簡單的解決方案是爲character結構創建轉換構造函數,該構造函數接受單個char參數並正確初始化該字符的結構。

或者簡單地創建一個character結構並明確地將正確的成員設置爲所需字符。

+1

@hereToLearn真的沒有簡單的方法使用指針將「字符」結構的「字符串」轉換爲C風格的「字符串」,或者以其他方式進行轉換。你必須創建一個爲結果數組動態分配足夠內存的函數(使用'new []'),然後遍歷字符串並一次完成一個字符的轉換。 –

相關問題