一、描述:
之前在没有参与列表匹配的构造函数这篇文里提到过同样的问题,但是这一次不太一样,解决方法完全不一样。
二、资料
与之前的文章查询资料一样。
1.解决方法:const
2.解决方法:去掉引用,去掉*
三、问题描述:
对着书本抄的代码,却发现有问题。出错在“没有参与列表匹配的构造函数。
#include<iostream>
using namespace std;
class String {
public: String() { p = NULL; }
String( char* str) { p = str; }
void display();
private:
char *p;
};
void String::display() {
cout << p << endl;
}
int main()
{
String c("book");
c.display();
return 0;
}
四、报错原因:
构造函数中第二个参数的类型为:unsigned&,而引用只能是引用一个对象,实例化对象时,括号内第二个参数的类型是一个字面值,无法初始化一个unsigned&类型。
五、解决方案:
1.加入const
#include<iostream>
using namespace std;
class String {
public: String() { p = NULL; }
String(const char* str) { p = str; }
void display();
private:
const char *p;
};
void String::display() {
cout << p << endl;
}
int main()
{
String c("book");
c.display();
return 0;
}
问题解决。