c++ - 如何让两个不同的对象方法互相用作参数

标签 c++ class

标题.h

class Foo{
public:
void fooFunction(std::map <std::string, Bar> &);
}

class Bar{
public:
void barFunction(std::map <std::string, Foo> &, Foo &);
}

当我尝试编译它时,我得到一个错误,说 Bar 没有在 fooFunction 的范围内声明,当我切换声明的顺序时,我得到一个错误,说 Foo 不在 barFunction 的范围内。

如何让它们在彼此的范围内?如果我需要多个头文件,我应该如何在我的 makefile 和 #include 中设置它?

最佳答案

您可以简单地在 header 中转发声明需要它的其他类:

class Bar;

class Foo
{
public:
    void fooFunction(std::map <std::string, Bar>&);
};

class Bar
{
public:
    void barFunction(std::map<std::string, Foo>&, Foo &);
};

如果 Foo 在定义 Bar 之前不在任何地方使用 Bar by value 则此方法有效。这意味着将其存储为成员,作为参数传递,返回该类型的值。在这种情况下你没问题,因为 Foo 参数是通过引用传递的。

请注意,即使您的 std::map 按值存储类型 Bar ,这仍然没问题,因为它是一个模板并且在您使用它之前不会被解析,在哪个时间 Bar 将被定义。

关于c++ - 如何让两个不同的对象方法互相用作参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57193410/

相关文章:

c++ - 混淆数据地址对齐

javascript - javascript es6 中链接静态和非静态方法

c++ - 为什么在一个类中可以使用多个std vector ?

c++ - C++ 中的类中可以有可变数量的变量吗?

c++ - 在同一个 .obj 模型文件上,Assimp 查看器比 Assimp C++ 导入器快得多

c++ - 如果模板类型是可实例化的,则执行某些操作

c++ - 尝试构建 C++ 程序时收到错误消息 "Template with C linkage"

c++ - BOOST_FOREACH 和 cxxtest 插件的转换问题

java - java中类之间的一对一关系

php - 我如何在 cakephp 1.3 中使用独立类?