注册 登录
编程论坛 C++教室

类向前声明小问题

丘山君 发布于 2018-05-16 00:30, 1684 次点击
两个类,类中相互要用到对方的指针,就把其中一个类向前声明了
但是编译报错了,想请问下是错在哪?谢谢。
程序代码:
#include <iostream>

using namespace std;
class Visitor;//,,,,,,,
//被访问者
class Library{
private :
    int x,y;
public :
    Library(){
        x=0;
        y=0;
    }
    void Accept(Visitor *v){
        v->visit(this);
    }
    void Do(){
        cout<<"x="<<x<<endl;
        cout<<"y="<<y<<endl;
    }
    ~Library(){
        cout<<"Library xigou"<<endl;
    }
};
//访问者
class Visitor{
public :
    Visitor(){
        cout<<"efas"<<endl;
    }
    void visit(Library *l){
        l->Do();
    }

};

int main()
{
   Visitor *pv=new Visitor();
   Library  *pl=new Library();
   pl->Accept(pv);
   delete pl;
   delete pv;
}

加上错误信息。
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2018-5-16 00:31编辑过]

5 回复
#2
lin51616782018-05-16 00:36
不要在类内部写成员函数的实现
把实现写在2个类下面就可以了
#3
丘山君2018-05-16 00:39
回复 2楼 lin5161678
你好,你的回答不太懂,可以再给我详细说下吗?谢谢。
#4
lin51616782018-05-16 00:44
程序代码:
#include <iostream>

using namespace std;
class Visitor;//,,,,,,,
//被访问者
class Library{
private :
    int x,y;
public :
    Library(){
        x=0;
        y=0;
    }
    void Accept(Visitor *v);
    void Do();
    ~Library();
};
//访问者
class Visitor{
public :
    Visitor(){
        cout<<"efas"<<endl;
    }
    void visit(Library *l);

};

void Library::Accept(Visitor *v){
    v->visit(this);
}

void Library::Do(){
    cout<<"x="<<x<<endl;
    cout<<"y="<<y<<endl;
}

void Visitor::visit(Library *l){
    l->Do();
}

int main()
{
   Visitor *pv=new Visitor();
   Library  *pl=new Library();
   pl->Accept(pv);
   delete pl;
   delete pv;
}
#5
丘山君2018-05-16 01:14
回复 4楼 lin5161678
谢谢。
#6
Jonny02012018-05-18 13:44
用指针的方式相互引用要用分离编译
否则可能会出现无止尽的调用
1