C++ 如何在另一个对象内取消引用对象的指针

C++ 如何在另一个对象内取消引用对象的指针,c++,class,dereference,C++,Class,Dereference,我需要构建一组相互依赖的类。当我将指向一个类的指针传递给在其中实例化的另一个类时,我遇到了麻烦 这里有一个例子来说明我的问题 #include<iostream> #include<vector> using namespace std; class base; // child class class child { public: child(){}; void setPointer (base* ptr){point

我需要构建一组相互依赖的类。当我将指向一个类的指针传递给在其中实例化的另一个类时,我遇到了麻烦

这里有一个例子来说明我的问题

#include<iostream>
#include<vector>

using namespace std;

class base;

//

 child class
    class child
    {
    public:
    child(){};
    void setPointer (base* ptr){pointer = ptr; }
    void printing(){(*pointer).print();} // error C2027: use of undefubed type base
                                        // error C2227: '.print' must have class/struct/union
private:
    base* pointer;
};

// base class
class base
{
public:
    base()
    {
        initial_vec();
        VEC[0].setPointer(this);
        VEC[0].printing();
    }

    void print() { cout <<"printing from BASE"<< endl;}

    void initial_vec ()
    {
        child child1;
        VEC.push_back(child1);
    }

private:
    vector<child> VEC;
};

int main()
{
    base b1;

    system("pause");
    return 1;
}
你知道我是如何做到这一点而不犯这些错误的吗


提前感谢您

您似乎收到了错误,因为您试图仅使用转发声明从基类调用printing。要解决此问题,请在完全定义基类后定义函数体

更多关于远期申报的细节

你知道我是如何做到这一点而不犯这些错误的吗

这相当简单。省略引用base的内联代码部分,并将tem移到类的完整声明之后:

#include<iostream>
#include<vector>

using namespace std;

class base;

 child class {
    public:
    child(){};
    void setPointer (base* ptr); // <<< Only declare the functions here
    void printing();

private:
    base* pointer;
};

不能从内联代码中取消引用转发声明。这必须是一个独立的翻译单位。
// base class
class base {
public:
    base()
    {
        initial_vec();
        VEC[0].setPointer(this);
        VEC[0].printing();
    }

    void print() { cout <<"printing from BASE"<< endl;}

    void initial_vec ()
    {
        child child1;
        VEC.push_back(child1);
    }

private:
    vector<child> VEC;
};
void child::setPointer (base* ptr){pointer = ptr; }
void child::printing(){(*pointer).print();}

int main() {
    base b1;

    system("pause");
    return 1;
}