首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-02-24 
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++
[解决办法]
引用:
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);
}

热点排行