class Sample
{
public:
Sample();
Sample(int i);
Sample(Sample& s);
~Sample();
};
Sample::Sample()
{
cout<<"Default constructor called\n";
}
Sample::Sample(int i)
{
cout<<"1-argument constructor called\n";
}
Sample::Sample(Sample& s)
{
cout<<"Copy constructor called\n";
}
Sample::~Sample()
{
cout<<"Destructor called\n";
}
void Fun(Sample s)
{
}
int main()
{
Sample s1;
Fun(5);
return 0;
}
我預計5 但是,隱式轉換當我編譯上面的代碼中,我得到以下錯誤:錯誤自動轉換
main.cpp:7:8: error: no matching function for call to ‘Sample::Sample(Sample)’
main.cpp:7:8: note: candidates are:
Sample.h:10:3: note: Sample::Sample(Sample&)
Sample.h:10:3: note: no known conversion for argument 1 from ‘Sample’ to ‘Sample&’
Sample.h:9:3: note: Sample::Sample(int)
Sample.h:9:3: note: no known conversion for argument 1 from ‘Sample’ to ‘int’
Sample.h:8:3: note: Sample::Sample()
Sample.h:8:3: note: candidate expects 0 arguments, 1 provided
Helper.h:6:13: error: initializing argument 1 of ‘void Fun(Sample)’
問題是什麼?當我刪除複製構造函數時,上面的代碼編譯成功。
在此先感謝。
爲什麼「有趣(5);」調用「Sample :: Sample(int i)」?如何在這種情況下轉換工作? – URL87
@ URL87有一個參數構造函數,如果沒有標記爲明確的,應該調用它。但是,在這裏扮演什麼角色來複制構造函數而不讓代碼編譯,這是我的困惑。 – abhithakur88