HasPtr b=string("qqqqq");
类在这样初始化的时候是不需要拷贝构造函数的参与的么?
经过我如下测试
HasPtr(const string &s=string()):ps(new string(s)),i(0){cout<<*ps<<" 111"<<endl;}
HasPtr(const HasPtr &Has):ps(new string(*Has.ps)),i(Has.i){cout<<*ps<<" 222"<<endl;}
输出为
qqqqq 111
也证实了是不需要它参与
那我把拷贝构造函数中参数的const去掉
编译器就提示错误如下:
(编辑器为g++ )( -std=c++11 )
/cygdrive/c/Users/acer/Desktop/1.cpp:78:25: 错误:对‘HasPtr::HasPtr(HasPtr)’的调用没有匹配的函数
HasPtr b=string("qqqqq");
^
/cygdrive/c/Users/acer/Desktop/1.cpp:78:25: 附注:备选是:
/cygdrive/c/Users/acer/Desktop/1.cpp:12:3: 附注:HasPtr::HasPtr(HasPtr&)
HasPtr(HasPtr &Has):ps(new string(*Has.ps)),i(Has.i){cout<<*ps<<" 222"<<endl;}
^
/cygdrive/c/Users/acer/Desktop/1.cpp:12:3: 附注: no known conversion for argument 1 from ‘HasPtr’ to ‘HasPtr&’
/cygdrive/c/Users/acer/Desktop/1.cpp:11:3: 附注:HasPtr::HasPtr(const string&)
HasPtr(const string &s=string()):ps(new string(s)),i(0){cout<<*ps<<" 111"<<endl;}
^
/cygdrive/c/Users/acer/Desktop/1.cpp:11:3: 附注: no known conversion for argument 1 from ‘HasPtr’ to ‘const string& {aka const std::basic_string<char>&}’
明明是用HasPtr(const string &s=string()):ps(new string(s)),i(0){cout<<*ps<<" 111"<<endl;}匹配的,却告诉我没有匹配的构造函数...
(在做c++ primer 第五版 13.31习题是碰到的问题,习题能做出来)
求解答,谢谢拉
类在这样初始化的时候是不需要拷贝构造函数的参与的么?
经过我如下测试
HasPtr(const string &s=string()):ps(new string(s)),i(0){cout<<*ps<<" 111"<<endl;}
HasPtr(const HasPtr &Has):ps(new string(*Has.ps)),i(Has.i){cout<<*ps<<" 222"<<endl;}
输出为
qqqqq 111
也证实了是不需要它参与
那我把拷贝构造函数中参数的const去掉
编译器就提示错误如下:
(编辑器为g++ )( -std=c++11 )
/cygdrive/c/Users/acer/Desktop/1.cpp:78:25: 错误:对‘HasPtr::HasPtr(HasPtr)’的调用没有匹配的函数
HasPtr b=string("qqqqq");
^
/cygdrive/c/Users/acer/Desktop/1.cpp:78:25: 附注:备选是:
/cygdrive/c/Users/acer/Desktop/1.cpp:12:3: 附注:HasPtr::HasPtr(HasPtr&)
HasPtr(HasPtr &Has):ps(new string(*Has.ps)),i(Has.i){cout<<*ps<<" 222"<<endl;}
^
/cygdrive/c/Users/acer/Desktop/1.cpp:12:3: 附注: no known conversion for argument 1 from ‘HasPtr’ to ‘HasPtr&’
/cygdrive/c/Users/acer/Desktop/1.cpp:11:3: 附注:HasPtr::HasPtr(const string&)
HasPtr(const string &s=string()):ps(new string(s)),i(0){cout<<*ps<<" 111"<<endl;}
^
/cygdrive/c/Users/acer/Desktop/1.cpp:11:3: 附注: no known conversion for argument 1 from ‘HasPtr’ to ‘const string& {aka const std::basic_string<char>&}’
明明是用HasPtr(const string &s=string()):ps(new string(s)),i(0){cout<<*ps<<" 111"<<endl;}匹配的,却告诉我没有匹配的构造函数...
(在做c++ primer 第五版 13.31习题是碰到的问题,习题能做出来)
求解答,谢谢拉