2013-02-24 52 views
2

我不能使用對象A3來調用「明確一個(串x)」,我得到兩個編譯錯誤,如:爲什麼我無法調用'顯式的(字符串x)'?

[錯誤]從「爲const char *」到「廉政」無效的轉換[-fpermissive]

[錯誤]初始化的參數1 '::一個(int)的'[-fpermissive]

我的預期出放是 'INT INT雙串';

有人能幫我刪除這些錯誤嗎?感謝你的時間。

#include<iostream> 
#include<string.h> 

using namespace std; 


struct a{ 

    a(int x=0){cout<<" int "; 
    } 
    inline a (double x){cout<<" double "; 
    } 
    explicit a (string x){ cout<<" string "; 
    } 

}; 


int main() 
{ 
    a a0(NULL); 
    a a1=9; 
    a a2=1.1; 
    a a3=("Widf"); //Error 
} 

回答

2

顯式構造具有通過結構/類的名字叫:

a("Widf") 

使用一個平等的構造函數不明確的構造函數調用。 您可以使用此:

a a3 = a("Widf") 

這將:

  1. 創建一個臨時對象
  2. 使用拷貝構造函數來創建A3

編譯器優化應該能夠優化這個雖然。

或者,你可以只寫

a a3("Widf") 
3

在語法上,C++解釋

a a3 = ("Widf"); 

作爲 「計算表達式"Widf",然後構造稱爲a3a類型被初始化爲等於它的一個對象。」由於"Widf"的類型爲const char[4],因此如果存在可用的隱式轉換構造函數,C++將只能初始化a3"Widf"。由於您明確標記了構造函數explicit,因此此隱式轉換不可用,因此出現此錯誤。

要解決這個問題,請嘗試重寫該行,

a a3("Widf"); 

這並不試圖評估"Widf"第一,而是直接傳遞給它作爲參數構造函數。

希望這會有所幫助!

+0

謝謝大家..! – sree 2013-02-24 07:41:07

相關問題