-2

我正在尝试在基类方法中创建派生类对象。

我收到上述错误。下面是一个代码片段。

有什么帮助吗?

 ---- 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);
 }
4

3 回答 3

1

为了实例化一个类,你需要完整的类型。这

SipObj sip;

需要 的完整定义SipObj。一个简单的前向声明是行不通的,您需要包含适当的标题。

一般来说,我会说让基类显式依赖于它的派生类型之一是一个非常糟糕的主意。

关于您报告的另一个错误,它只是说该类VoipConnection没有默认构造函数。所以你必须提供一个。

于 2012-06-15T09:27:55.180 回答
1

第二个错误指​​出该类VoipConnection没有构造函数SipObj尝试调用的默认构造函数。

SipObjin的前向声明Voip_connection.cc看起来很奇怪。为什么基类的实现需要知道派生类的存在?

于 2012-06-15T09:35:20.443 回答
0

好的,这就是我所做的。我需要基类来实例化派生类。我在 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);
 }
于 2012-06-15T10:13:59.540 回答