读书人

C++类互相引用的有关问题跪求高手回

发布时间: 2013-02-24 17:58:56 作者: rapoo

C++类互相引用的问题,跪求高手回答,困扰已久

class student;
class teacher
{
public:
void setname( string a ) { name = a; }
string getname() { return name; }
//void liststudentsname()
//{
//for(int i=0; i<students.size(); i++) cout<<students[i]->getname();
//}
//void add(student s) { students.push_back(&student); }
private:
string name;
vector<student*> students;
};
class student
{
public:
string getname() { return name; }
string getteachername() { return myteacher->getname(); }
void setname( string a ) { name = a; }
void setteacher(teacher *t) { myteacher = t; }
private:
int age;
string name;
teacher* myteacher;
};




注释部分编译会遇到错误!
我不想把teacher* myteacher和vector<student*> students放在public(我知道放在public中很容易实现),也不想通过定义两个.h文件用一个include另一个。急求答案! c++
[解决办法]
引用:
C/C++ code?123456789101112131415161718192021222324252627class student;class teacher{public: void setname( string a ) { name = a; } string getname() { return name; } //void listst……


简单的把你的commentted out的部分分开成声明和定义?

在你的header file底端做类似

void teacher::add(student s)
{
students.push_back(&s);
}

另外,楼主注意这个函数的潜在问题
[解决办法]
引用:
C/C++ code?123456789101112131415161718192021222324252627class student;class teacher{public: void setname( string a ) { name = a; } string getname() { return name; } //void listst……

私有成员,通过它的成员方法调用
[解决办法]
class student;
class teacher
{
public:
friend class student;
void setname( string a ) { name = a; }
string getname() { return name; }
void liststudentsname();

void add(student *s) { students.push_back(s); }
private:
string name;
vector<student*> students;
};

class student
{

public:
friend class teacher;
string getname() { return name; }
string getteachername() { return myteacher->getname(); }
void setname( string a ) { name = a; }
void setteacher(teacher *t) { myteacher = t; }
private:
int age;
string name;
teacher* myteacher;
};

void teacher::liststudentsname()
{
for(int i=0; i<students.size(); i++)
cout<<students[i]->getname();
}


我也不太清楚为什么inline就不行


所以就直接在类外定义了
[解决办法]
注释部分调用了student的memfun,解决办法是在另一个文件写函数实现,另外
函数应该为:

void add(student* s) { students.push_back(student); }

[解决办法]

#include <iostream>
#include <vector>
#include <string>

using namespace std;

class student;

class teacher
{
public:
void setname( string a ) { name = a; }
string getname() { return name; }
void liststudentsname();
void add(student& s);
private:
string name;
vector<student*> students;
};

class student
{
public:
string getname() { return name; }
string getteachername() { return myteacher->getname(); }
void setname( string a ) { name = a; }
void setteacher(teacher *t) { myteacher = t; }
private:
int age;
string name;
teacher* myteacher;
};

void teacher::liststudentsname()
{
for(int i=0; i<students.size(); i++)
cout<<students[i]->getname();
}
void teacher::add(student& s)
{
students.push_back(&s);
}

读书人网 >C++

热点推荐