C++类互相引用的问题,跪求高手回答,困扰已久class studentclass teacher{public:void setname( string a
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++
[解决办法]简单的把你的commentted out的部分分开成声明和定义?
在你的header file底端做类似
void teacher::add(student s)
{
students.push_back(&s);
}
另外,楼主注意这个函数的潜在问题
[解决办法]私有成员,通过它的成员方法调用
[解决办法]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);
}