源代码:
#include <iostream>
#include<string>
class CStudent
{
public:
CStudent(char *n,int a);
~CStudent();
private:
char *name;
int age;
};
CStudent::CStudent(char *n,int a):age(a)
{
int nLen=strlen(n);
name=new char[nLen+1];
strcpy(name,n);
name[nLen]='\0';
}
CStudent::~CStudent()
{
delete[] name;
}
class CTeacher
{
public:
CTeacher(char *tn,int ta);
~CTeacher();
void SetStuAge(int a);
pricate:
char *name;
int age;
CStudent stu;
};
CTeacher::CTeacher(char *tn,int ta):age(ta)
{
int nLen=strlen(tn);
name=new char[nLen+1];
strcpy(name,n);
name[nLen]='\0';
}
CTeacher::CTeacher(){
delete[] name;
}
void CTeacher::SetStuAge(int a)
{
stu.age=a;
}
void main() {
CStudent stu("张三",25);
CTeacher tea("李四",26);
//cout<<"CStudent::nTotalObj="<<CStudent::nTotalObj<<endl;
}
【第一个错误】报错一堆。
【改进】加一个默认构造函数呢,因为class CTeacher创建了CStudent stu;
【第二个错误】DEVc++报错
未命名4.cpp:(.text+0xd0): undefined reference to `CStudent::CStudent()'
[Error] ld returned 1 exit status
修改前:
#include <iostream>
//#include<string>
#include<cstring>
//using namespace std;
class CStudent
{
public:
friend class CTeacher;
CStudent();
CStudent(const char *n,int a);
~CStudent();
private:
char *name;
int age;
};
CStudent::CStudent(const char *n,int a):age(a)
{
int nLen=strlen(n);
name=new char[nLen+1];
strcpy(name,n);
name[nLen]='\0';
}
CStudent::~CStudent()
{
delete[] name;
}
class CTeacher
{
public:
CTeacher(const char *tn,int ta);
~CTeacher();
void SetStuAge(int a);
private:
char *name;
int age;
CStudent stu;
};
CTeacher::CTeacher(const char *tn,int ta):age(ta)
{
int nLen=strlen(tn);
name=new char[nLen+1];
strcpy(name,tn);
name[nLen]='\0';
}
CTeacher::~CTeacher(){
delete[] name;
}
void CTeacher::SetStuAge(int a)
{
stu.age=a;
}
int main() {
CStudent stu("张三",25);
CTeacher tea("李四",26);
//cout<<"CStudent::nTotalObj="<<CStudent::nTotalObj<<endl;
return 0;
}
修改后:
#include <iostream>
//#include<string>
#include<cstring>
//using namespace std;
class CStudent
{
public:
friend class CTeacher;
CStudent() {}
CStudent(const char *n,int a);
~CStudent();
private:
char *name;
int age;
};
CStudent::CStudent(const char *n,int a):age(a)
{
int nLen=strlen(n);
name=new char[nLen+1];
strcpy(name,n);
name[nLen]='\0';
}
CStudent::~CStudent()
{
delete[] name;
}
class CTeacher
{
public:
//CTeacher() {}
CTeacher(const char *tn,int ta);
~CTeacher();
void SetStuAge(int a);
private:
char *name;
int age;
CStudent stu;
};
CTeacher::CTeacher(const char *tn,int ta):age(ta)
{
int nLen=strlen(tn);
name=new char[nLen+1];
strcpy(name,tn);
name[nLen]='\0';
}
CTeacher::~CTeacher(){
delete[] name;
}
void CTeacher::SetStuAge(int a)
{
stu.age=a;
}
int main() {
CStudent stu("张三",25);
CTeacher tea("李四",26);
//cout<<"CStudent::nTotalObj="<<CStudent::nTotalObj<<endl;
return 0;
}
发现了吗,之前报错是因为少了构造函数的定义{}。。