默认构造函数的问题

来源:百度知道 编辑:UC知道 时间:2024/05/17 08:00:40
#include<iostream>
using namespace std;
class String
{
public :
String(int len);
int length();
private:
int curLen;
char *ch;
};
class Person
{
String name;
String address;
Person::Person(const String & n,const String & a)
{
name = n;
address = a;
}

};
void main()
{

}
执行时出错:
1>c:\users\cheng\documents\visual studio 2008\projects\myfirst\re.cpp(17) : error C2512: “String”: 没有合适的默认构造函数可用

他没用我定义的String(int len),而是寻找了默认构造函数,但没找到就出错了
为什么用拷贝构造函数Person::Person(const String & n,const String & a):name(n),address(a){}就是用的是String(int len)呢?

你的String类中没有不带参数的构造函数,所以出错。
String name(10);
String address(20);就可以了。

Person::Person(const String & n,const String & a):name(n),address(a){}
等同于
String name(n);
String address(a);
Person::Person(const String & n,const String & a)
{
n = name;
a = address;//当然不能这样划等号,如果你没有重载=的话;这里表示的意思是n对象就是name对象。
}

你定义了String(int len),编译系统不会自己添加默认构造函数了。
但是你name(n)这样的用法,就会是调用String(int len)