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

How to Have Two Different Object Methods Use Each Other as Paramters

本文关键字:方法 对象 参数 两个      更新时间:2023-10-16

header.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 s 中进行设置?

您只需在标头中转发声明需要它的另一个类:

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

前提是在定义Bar之前,Foo不会在任何地方使用 Bar by 值,这就可以了。 这意味着将其存储为成员,作为参数传递,返回该类型的值。 在这种情况下,您很好,因为Foo参数是通过引用传递的。

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