c++ - 类之间传递值

标签 c++ class share

我正在尝试在两个类之间传递值:

#ifndef classa_inc
#define classa_inc

#include "classb.hpp"

class classa {
    private:
        int a;
        classb tmp;
    public:
        classa(int);
        classa ();
        int get_a() const;
        int get_b() const;
};

#endif

// ..

#include "classa.hpp"

classa::classa (int _a) : a(_a), tmp(30) {}
classa::classa () : a(20), tmp(30) {}

int classa::get_a () const {
    return a;
}

int classa::get_b () const {
    return tmp->get_b ();
}

// ..

#ifndef classb_inc
#define classb_inc

#include "classa.hpp"

class classa;

class classb {
    private:
        classa *ca;
        int b;
    public:
        classb (int);
        classb (classa *);
        int get_b () const;
};

#endif

// ..

#include "classb.hpp"

classb::classb (int _b) : b(_b) {}

classb::classb (classa *ca) {
    b = ca->get_a ();
}

int classb::get_b () const {
    return b;
}

// ...
#include <iostream>
#include "classa.hpp"
#include "classb.hpp"

int main () {
    classa a(10);
    classa a1; // 20
    classb b(&a1); // pass 20
    std::cout << a.get_a() << std::endl; // 10
    std::cout << a.get_b() << std::endl; // 30
    std::cout << b.get_b() << std::endl; // 20
    return 0;
}

我已经阅读了一些关于该主题的博客和教程,我想问问你们这样做是否正确,或者是否有其他方法或解决方法,因为我遇到了错误:

classa.hpp:9:3: 错误:‘classb’ no nombra a un tipo

像 classb 这样的东西没有命名类型......有什么想法吗?

最佳答案

在classb.hpp中,classa的前向声明就足够了(class classa;)。您不需要包含 classa.hpp。包含它会造成循环依赖:classb.hpp包含classa.hpp,classa.hpp又包含classb.hpp等

所以:

#ifndef classb_inc
#define classb_inc

//#include "classa.hpp" -> not ok and useless

class classa; // => ok

classa.hpp 需要包含在 classb.cpp 中,因为它需要了解其实现。

#include "classb.hpp"
#include "classa.hpp" 

classb::classb (int _b) : b(_b) {}

classb::classb (classa *ca) {
    b = ca->get_a (); //needs to know if classa indeed has a get_a() method
}

int classb::get_b () const {
    return b;
}

这些更改使代码编译成功。

关于c++ - 类之间传递值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29952393/

相关文章:

c++ - 按下键或移动鼠标时游戏速度变慢

android/opencv - 从 NDK 中的应用程序文件夹加载级联文件

Python 错误 : missing 1 required positional argument: 'self'

java - 类不再被正确识别

linux - 使文件夹对 Linux 中的几个选定用户可见

c++ - 避免 C++(部分)模板特化中的代码重复

c++ - 在 C++ 中用括号解析字符串

java - java 编译器对于类定义中对该类的引用做了什么?

android - 开发具有 "share-to"功能的 android 应用程序

javascript - 当 `share_open_graph` 存在时,Facebook `og:description` 共享忽略 `og:image`