我的简单的c++程序运行不了 请高手说一下哪错了?

来源:百度知道 编辑:UC知道 时间:2024/06/18 16:38:59
#include<iostream.h>
#include<string.h>
class CStrOne
{
public:
char str[10];
CStrOne(char stre[10])
{
strcpy(str,stre);
}
void putout()
{
cout<<str<<endl;
}
};
class CStrTwo:public CStrOne
{
public:
CStrTwo(char stra[10])
{
strcpy(strr,stra);
}
char strr[10];
};
void main()
{
CStrOne one("hello");
CStrTwo two("good");
strcpy(one.str,strcat(one.str,two.strr));
one.putout();
}

说是 19行有错:no appropriate default constructor available

给你改了一下 可以用了

#include<iostream.h>
#include<string.h>
class CStrOne
{
public:
char str[10];
CStrOne(char stre[10])
{
strcpy(str,stre);
}
void putout()
{
cout<<str<<endl;
}
};
class CStrTwo:public CStrOne
{
public:
CStrTwo(char stra[10]):CStrOne(stra)
{
strcpy(strr,stra);
}
char strr[10];
};
void main()
{
CStrOne one("hello");
CStrTwo two("good");
strcpy(one.str,strcat(one.str,two.strr));
one.putout();
}

CStrTwo继承CStrOne,所以CStrTwo调用构造函数的时候首先需要调用基类CStrOne的构造函数。

因为你没有指明如何调用CStrOne的构造函数,所以默认调用CStrOne的默认构造函数。

而你只写了CStrOne的传入参数为char s[10]的构造函数,而没有写默认构造函数(没有任何参数的构造函数),所以会有错误no appropriate default constructor available,说没有合适的默认构造函数。

CStrTwo(char stra[10])
{
strcpy(strr,stra);
}

改成
CStrTwo(c