标题.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/