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;