首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单头单头库中的循环依赖关系

单头单头库中的循环依赖关系
EN

Stack Overflow用户
提问于 2016-04-08 10:10:05
回答 1查看 309关注 0票数 3

考虑只有头的库实现,如下所示,foo和bar具有循环依赖关系。

代码语言:javascript
复制
class bar;
class foo {
public:
    foo(std::shared_ptr<bar> bar_){
        //bar_->mar()
    }
    void moo() {};
};


class bar {
    bar(std::shared_ptr<foo> foo_) {
        foo_->moo();
    }
    void mar() {  };
};

在将此头包含在(client.cpp)文件中并注释掉//bar_->mar()时,编译器会给出错误:

代码语言:javascript
复制
error C2027: use of undefined type 'bar'
see declaration of 'bar'
error C2039: 'mar': is not a member of 'std::shared_ptr<bar>'

如果库仅为标头,该问题是否可以解决?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-08 11:33:41

出现此问题是因为您试图在类定义之前调用类"bar“的方法"marr()”。只有在调用“bar_->mar()”时才声明类"bar“;”编译器知道有类“"bar”,但不知道它有哪些方法。解决方案是在定义"bar“之后调用"foo”的构造函数。如果您的库仅为标头,则可以将其声明为“内联”。

此代码编译ok:

代码语言:javascript
复制
#pragma once
#include <memory>

class bar;
class foo {
public:
    foo(std::shared_ptr<bar> bar_);
    void moo() {};
};


class bar {
public:
    bar(std::shared_ptr<foo> foo_) {
        foo_->moo();
    }
    void mar() {  };
};

inline foo::foo(std::shared_ptr<bar> bar_){
    bar_->mar();
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36496943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档