繁体   English   中英

类向前声明C ++

[英]Class Forward Declaration C++

我正在遵循有关观察者模式的教程,遇到了以下问题。

即,我具有以下基类:

class Subject;
class Observer;

接下来,我想再定义两个类

class StockGrabber: public Subject {
    //...
    //the constructor involves a StockObserver object
    StockGrabber(StockObserver so){....};

}
class StockObserver: public Observer {
    //...
    StockObserver(StockGrabber sg) {....};
}

有什么办法可以使用前向声明,使StockGrabber知道StockObserver存在吗? 考虑到它们的相互依赖性,我不能只交换两个类的位置。

我应该如何解决这个问题? (原始教程是用Java编写的,但是我正在尝试用C ++实现它)谢谢!

前向声明还不够,您必须对StockObserver :: StockGrabber(StockObserver so)成员函数的签名进行一些更改,因为如果通过值传递参数,则不仅需要参数类的声明,还需要定义。 如果通过引用传递,则声明足以声明该函数,但是该声明肯定不足以实现该函数,因此可能是您必须在StockObserver类定义之后在类外部定义函数。 看下面的代码,它会更容易理解。

class Subject{ /* ... */ };
class Observer{ /* ... */ };

class StockObserver;

class StockGrabber: public Subject {
    //...
    //the constructor involves a StockObserver object
    StockGrabber(StockObserver& so); // class StockObserver is declared before StockGrabber::StockGrabber(StockObserver&).
};

class StockObserver: public Observer {
    //...
    StockObserver(StockGrabber sg) { /* ... */ };
};

StockGrabber::StockGrabber(StockObserver& so){ /* ... */ } // class StockObserver is defined before StockGrabber::StockGrabber(StockObserver&).

是的,您可以使用StockObserver前向声明。 以下程序成功构建。

class Subject {};
class Observer {};

class StockObserver;

class StockGrabber: public Subject {
    StockGrabber(StockObserver so);

};

class StockObserver: public Observer {
    StockObserver(StockGrabber sg);
};

StockGrabber::StockGrabber(StockObserver so) {}

StockObserver::StockObserver(StockGrabber sg) {}

int main()
{
   return 0;
}

尚不清楚您希望如何使用构造函数的参数。 使用构造函数的参数时会遇到挑战。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM