继承:错误:聚合类型A的类型不完整,无法定义
Inheritance : error: aggregate typeA has incomplete type and cannot be defined
我正在尝试在基类方法中创建派生类对象。
我收到上述错误。下面是一个代码片段。
有什么帮助吗?
---- Voip_connection.hh ----
#ifndef __VOIP_CONNECTION_HH
#define __VOIP_CONNECTION_HH
class VoipConnection {
public:
VoipConnection();
VoipConnection (ConnectionState* cs);
void update_last_data_rcvd_time() { last_data_rcvd_time_ = msec_time(); }
uint64_t last_data_rcvd_time() { return last_data_rcvd_time_; }
void set_voip_proto(int proto) { voip_proto_ = proto;}
~VoipConnection()
{
--nx_stat().act_connections;
voip_idle_wait_timer_clear();
sv_streaming_offset_ = 0;
cl_streaming_offset_ = 0;
}
// Lots and Lots of Other stuff
}
----Voip_sip.hh -----
#ifndef __VOIP_SIP_HH
#define __VOIP_SIP_HH
#include "voip_connection.hh"
class SipObj: public VoipConnection
{
/* stuff */
}
--- Voip_connection.cc ----
#include "voip_connection.hh"
class SipObj; // Tried this in .hh file as well.
VoipConnection::voip_process_pdu(bool from_client)
{
SipObj sip;
sip.process(datap, &pdu_len);
}
为了实例化一个类,你需要完整的类型。这
SipObj sip;
需要SipObj
的完整定义。简单的前向声明是行不通的,您需要包含适当的标头。
一般来说,我会说让基类显式依赖于它的派生类型之一是一个非常糟糕的主意。
关于您报告的另一个错误,它只是说类VoipConnection
没有默认构造函数。所以你必须提供一个。
第二个错误指出类VoipConnection
没有SipObj
构造函数尝试调用的默认构造函数。
Voip_connection.cc
SipObj
的向前声明看起来很奇怪。为什么基类的实现需要知道派生类的存在?
好吧,
这就是我所做的。我需要基类来实例化派生类。我在 voip_sip.hh 中进行了前向声明,并将 voip_sip.hh 文件包含在 voip_connection.hh 中
---- Voip_connection.hh ----
#ifndef __VOIP_CONNECTION_HH
#define __VOIP_CONNECTION_HH
#include voip_sip.hh
class VoipConnection {
// Lots and Lots of Other stuff
}
----Voip_sip.hh -----
#ifndef __VOIP_SIP_HH
#define __VOIP_SIP_HH
class VoipConnection;
class SipObj: public VoipConnection
{
/* stuff */
}
--- Voip_connection.cc ----
#include "voip_connection.hh"
#include "voip_sip.hh"
VoipConnection::voip_process_pdu(bool from_client)
{
SipObj sip;
sip.process(datap, &pdu_len);
}
相关文章:
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- 列表参数的类型定义
- 使用模板化的键类型定义 std::map,该键类型基于作为参数接收的函数
- 关于 C++ 中的函数类型定义
- C++(和 ROS) - 包含与前向声明引用,设置默认值和类型定义
- 将使用/类型定义限制为类范围
- 模板类型定义?
- C++:模板类的类型定义
- 如何对命名空间限定类型进行类型定义?
- 此递归模板类型定义是否有效C++?
- 具有调整对齐方式的类型定义
- C++从抽象类型定义类成员
- 用于C++代码的 API 监视器类型定义 (XML)
- 如何将result_of与函数类型定义一起使用
- 在C++的适当类型定义位置
- 如何根据模板类型定义浮点常量?
- 如何为缺少预定义运算符而不扩展命名空间"std"的标准类型定义运算符>> (istream &, ...)?
- 参数化类的别名(或类型定义)内部类
- 如果我想从类型"T"定义元素的容器(来自 STL),那么"T"必须使用默认构造函数?