2014-03-29 65 views
0
  1. 使用統一的初始化在代碼下面給出我得到一個錯誤消息「沒有 默認構造函數」。那就是爲什麼我不能用統一 初始化器是規定必須有默認的構造函數在C++中

  2. 當我做了一個默認的構造函數,然後我得到一個關於大括號的錯誤。

請重點關注此程序和統一的initiallizer的問題。

我使用VS 2012和C++

class Circle { 

    double radius; 
    public: 

    Circle(double r) { radius = r; } 
    double circum() {return 2*radius*3.14159265;} 
    Circle() { 
    cout<<"ALI \n "; 
    } 
}; 

int main() { 

    Circle baz {30.0}; // uniform init. 

    Circle qux{}; 
    cout << "foo's circumference: " << baz.circum() << '\n'; 
    cout<<endl; 
    return 0; 
} 
+0

沒有默認構造函數 –

+0

我不明白。你仍然可以使用統一的初始化,而不需要默認的構造函數,就像創建'baz'時一樣。當然,如果你沒有默認的構造函數,那麼'{}'不起作用。 – chris

+0

這很好,但我正在使用Vs 2012。 根據#sharth,我們不能在VS 2012中使用它。 –

回答

1

這不是在Visual C發佈的版本支持++ 2012

有確實有在這裏初始化列表部分支持預覽(CTP):http://www.microsoft.com/en-us/download/details.aspx?id=35515。但是,即使在該預覽中,該特定代碼也不起作用,因爲STL尚未更新爲使用初始化程序列表。 這將正常工作是Visual Studio 2013.我希望它可以幫助。

4
  • 的Visual Studio 2012不支持統一初始化語法。
  • Visual Studio 2013支持此代碼。你可以看到,在這裏:Visual Studio 2013 Build
+0

你確定這一點。 ,因爲如果他們不允許我們這樣做,那麼使用這種格式的調用構造函數會出現問題。 –

+0

@NoumanMaqsood:編寫的代碼是有效的C++ 11代碼。編譯器正在編譯它(因爲它沒有完全實現這個標準)。 –

+0

謝謝@sharth。 –

相關問題