-2

I am trying to create a derived class object in base class method.

I am getting the error as mentioned above. Below is a code snippet.

Any help?

 ---- 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。単純な前方宣言ではうまくいきません。適切なヘッダーを含める必要があります。

一般に、基本クラスをその派生型の 1 つに明示的に依存させることは、かなり悪い考えだと言えます。

あなたが報告する他のエラーに関しては、単にクラスVoipConnectionにデフォルトのコンストラクターがないことを示しています。したがって、1 つを提供する必要があります。

于 2012-06-15T09:27:55.180 に答える
1

2 番目のエラーは、コンストラクターが呼び出そうとするVoipConnectionデフォルトのコンストラクターがクラスにないことを示しています。SipObj

inの前方宣言は奇妙SipObjに見えます。Voip_connection.cc基本クラスの実装で派生クラスの存在を知る必要があるのはなぜですか?

于 2012-06-15T09:35:20.443 に答える
0

さて、これは私がやったことです。派生クラスをインスタンス化するために基本クラスが必要でした.voip_sip.hhで前方宣言を行い、voip_connection.hhにvoip_sip.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 に答える