我正在尝试解决我的c ++项目中的循环依赖,并基于StackOverflow上的其他答案,我遵循相同的方法。但是,我仍然看到一个问题:
这是我的代码段:
// In ip6.hh
namespace net
{
class Inet4;
/** IP6 layer */
class IP6
{
using Stack = class Inet4;
void set_packet_forwarding(Stack::Forward_delg fwd)
{ forward_packet_ = fwd; }
Stack& stack_;
}
}
// In Inet4.hpp
#include "ip6/ip6.hpp"
namespace net {
class Inet4 : public Inet<IP4>{
IP6& ip_obj()
{ return ip6_; }
IP6 ip6_;
}
}
在main.cpp中,我将其包含如下:
#include <net/ip6/ip6.hpp>
#include <net/inet4.hpp>
> /home/nikhil/projects/ipv6/IncludeOS/api/net/ip6/ip6.hpp:84:32: error: > incomplete type 'net::Inet4' named in nested name specifier > void set_packet_forwarding(Stack::Forward_delg fwd) > ^~~~~~~ /home/nikhil/projects/ipv6/IncludeOS/api/net/ip6/ip6.hpp:35:9: note: > forward declaration of 'net::Inet4' class Inet4;
答案 0 :(得分:2)
只有Inet decalaration(不是定义)。编译器不知道Inet4的定义(因此Stack与Inet4相关)。