C++;:嵌套名称说明符中命名的类型不完整 我试图解决C++项目中的循环依赖性,并基于这里的StAdvExcel中的其他答案,遵循相同的方法。然而,我仍然看到一个问题:

C++;:嵌套名称说明符中命名的类型不完整 我试图解决C++项目中的循环依赖性,并基于这里的StAdvExcel中的其他答案,遵循相同的方法。然而,我仍然看到一个问题:,c++,C++,下面是我的代码片段: // 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; } S

下面是我的代码片段:

// 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_;
  }
}

只有Inet标记(而不是定义)。编译器不知道Inet4的定义(因此堆栈被设置为Inet4)。

只有Inet标记(而不是定义)。编译器不知道Inet4的定义(因此堆栈被设置为Inet4)。

什么是
前进\u delg
?我在代码中的任何地方都没有看到它被声明。我已经从代码段中删除了这一部分。你能把它添加回去吗?这似乎是这个问题的一个重要部分。还需要添加更多内容:例如,这就是问题的实质:使用Forward\u delg=delegate;什么是向前的?我在代码中的任何地方都没有看到它被声明。我已经从代码段中删除了这一部分。你能把它添加回去吗?这似乎是这个问题的一个重要部分。还需要添加更多内容:例如,这就是问题的实质:使用Forward\u delg=delegate;Inet4在Inet4.hpp中定义,稍后包含在cpp文件中。我应该如何解决此问题?您可以反转ipv6和inet 4,因为您可以转发声明ipv6,并且您在inet 4的定义范围内不访问ip6的任何成员或功能。我可以不为inet执行此操作吗?确保ipv6不访问inet上的任何成员函数?另外,对于ex:在我的ip6类中,我也有这样一个:Stack::Forward\u delg Forward\u packet;Inet4在Inet4.hpp中定义,稍后包含在cpp文件中。我应该如何解决此问题?您可以反转ipv6和inet 4,因为您可以转发声明ipv6,并且您在inet 4的定义范围内不访问ip6的任何成员或功能。我可以不为inet执行此操作吗?确保ipv6不访问inet上的任何成员函数?另外,对于ex:在我的ip6类中,我也有这样一个:Stack::Forward\u delg Forward\u packet;
#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;