C++:在嵌套名称说明符中命名的不完整类型

C++: incomplete type named in nested name specifier

本文关键字:类型 说明符 嵌套 C++      更新时间:2023-10-16

我正在尝试解决我的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_;
  }
}

在主要.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;

只有Inet贴花(不是定义(。编译器不知道 Inet4 的定义(因此 Stack 被归为 Inet4(。