【发布时间】:2020-11-03 20:36:18
【问题描述】:
我的目标是,我不想将所有方法都放在 ServerInterface(superclass) 中,而是将方法放在子类中以更好地组织代码。
class ServerInterface
{
public:
Router* router = new Router();
Client* client = new Client();
ServerInterface() {
} //Creates new Router and Client instance
};
class Router : public ServerInterface
{
public:
Router() {}
void randomRouterFunction() {}
};
class Client : public ServerInterface
{
public:
Client() {}
virtual void randomClientFunction() {};
};
class ProductionServer : public ServerInterface
{
public:
ProductionServer() {}
};
int main() {
ProductionServer* productionServer = new ProductionServer();
productionServer->router->randomRouterFunction(); //causes it to not debug
return 0;
}
在我的情况下,我只被允许访问ProductionServer,它必须从我的代码中的ServerInterface 继承。
因此,我不想打电话给productionServer->randomRouterFunction() 或productionServer->randomClientFunction(),而是希望能够打电话给productionServer->Router->randomRouterFunction() 等
尽管智能感知告诉我一切正常,但尝试运行我收到的代码
main:289:20: 错误:'class ProductionServer' 没有名为的成员 '路由器'
productionServer->router->randomRouterFunction();
这是否可行?认为它可能不起作用的原因是因为超类创建了Router的一个成员,它是子类,然后路由器子类创建了另一个超类,因为它继承了它,然后在超类中创建了另一个路由器子类...... .这将是一个无限循环?呵呵
ps。 randomFunction() 可以是任何方法,仅用作示例。
【问题讨论】:
-
我们实际上看不到损坏的代码,CoffeDev... 出示您的minimal reproducible example。
-
" 超类创建了Router 的一个成员,它是子类" 它没有;你有一个
Router*,而不是Router。 -
@πάνταῥεῖ 不,这更像是
class ProductionServer undeclared.... 无论如何,这里没有多个标题的证据,更不用说循环依赖了。咱们别操之过急,嗯? -
@AsteroidsWithWings 哦抱歉错过了,将编辑:D
标签: c++ class inheritance