我剛剛發現我這樣的代碼不能正確編譯?這裏有沒有編譯器提供的構造函數?爲什麼這段代碼編譯不正確?
class A
{
private:
A(const A& n);
};
int main()
{
A a;
}
該錯誤是 TEST.CPP:18:錯誤:11:注:關於 ')A :: A(' 調用 TEST.CPP沒有匹配的功能候選是:A :: A(常量一個&)
我使用G ++的Ubuntu 8.04下
我剛剛發現我這樣的代碼不能正確編譯?這裏有沒有編譯器提供的構造函數?爲什麼這段代碼編譯不正確?
class A
{
private:
A(const A& n);
};
int main()
{
A a;
}
該錯誤是 TEST.CPP:18:錯誤:11:注:關於 ')A :: A(' 調用 TEST.CPP沒有匹配的功能候選是:A :: A(常量一個&)
我使用G ++的Ubuntu 8.04下
編譯器爲您
A()
當且僅當該會提供再沒有用戶定義的構造,並A(A const &)
除非你要麼提供四種可能的拷貝構造函數A(A cv &)
,其中cv
是const
和volatile
任意組合。就你而言,你已經聲明瞭你自己的拷貝構造函數,這意味着編譯器將不會提供上述內容。
行A a;
需要一個可訪問的默認構造函數來編譯。
您在類A中聲明爲私有的構造函數是一個拷貝構造函數。
無論何時爲類提供參數化構造函數,C++都不會提供默認構造函數(一個不帶參數)。你必須顯式地爲你的類定義默認的類構造函數。
什麼是錯誤? – 2010-03-06 05:39:24
爲什麼這麼多的StackOverflow用戶質疑他們的問題標題中使用轉變 ? (標題編輯...) –
2010-03-06 05:41:40
@jjj:沒錯,但大多數「問題標題」實際上不是標題,因此首字母的首字母大寫應該是合適的。我相信無論是句子還是標題樣式都適合,但是如果你懶得做任何一方,都會比我懶得回答這個問題.... :) – 2010-03-06 05:49:08