无法将'this'的引用传递给另一个类的构造函数

时间:2013-03-28 21:15:37

标签: c++ object reference

我们有一个class CJ,在它创建时,它会创建一个不同的class BA对象,它想要将对它自己的引用传递给它自己:

BA:BA(const CJ& myCJRef);

编译器总是出错:

  

错误:未初始化的参考成员BA :: myCJRef

CJRefBA类中定义为类类型CJ

现在&*或两者都没有做任何事情,但会导致相同的错误。初始化很难,因为myCJRef的初始化需要传递另外两个类,但它会指向错误的对象。

我是'C'家伙......这很混乱。

全部谢谢!


按照以下答案,我到了使用此指针调用CJ对象中的方法的点,真正的代码如下:

InputPoolBufferAdapter :: InputPoolBufferAdapter(CJpsMixerChannel& _CJ,int jitter,int maxBuffers,unsigned long maxBufferAge):myCJpsMixerChannel(_CJ)

{
        myCJpsMixerChannel = _CJ;

        myJitter = jitter;  // assuming jitter will be the number of floats

        myJitterCounter = 0;

        myMaxBuffers = maxBuffers;

        myMaxBufferAge = maxBufferAge;

        myPopulateMetadataRequests = 0;

        mySendDataReadyAlert = true;

        clearBufferAdapterThreshhold = CLEAR_BUFFER_ADAPTER_THRESHHOLD;
};    

void InputPoolBufferAdapter::returnDataBufferToPool (ChannelBuffer_t buf) 
{
    void CJpsMixerChannel::myCJpsMixerChannel->returnBufferToInputPool(ChannelBuffer_t *returnBuffer_p);
};

void InputPoolBufferAdapter::notifyDataAvailable ()
{
    void myCJpsMixerChannel.notifyDestinationsDataAvailable(void);
};

void InputPoolBufferAdapter::bufferAdapterError (int a)
{
    void &myCJpsMixerChannel.inputBufferAdapterError(int error_code);
};

我尝试了几件你可以看到但却无法编译的东西,错误是:

InputPoolBufferAdapter.cpp:在成员函数'virtual void InputPoolBufferAdapter :: returnDataBufferToPool(ChannelBuffer_t)'中: InputPoolBufferAdapter.cpp:33:50:错误:' - >'标记之前的预期初始值设定项 InputPoolBufferAdapter.cpp:在成员函数'virtual void InputPoolBufferAdapter :: notifyDataAvailable()'中: InputPoolBufferAdapter.cpp:38:32:错误:'。'标记之前的预期初始化程序 InputPoolBufferAdapter.cpp:在成员函数'virtual void InputPoolBufferAdapter :: bufferAdapterError(int)'中: InputPoolBufferAdapter.cpp:43:32:错误:'。'标记之前的预期初始化程序

我不知所措,对此更多的想法不再“混乱”,但肯定是“迷茫”的软件人(我在C'嵌入式系统中25年后无法相信这让我搞砸了!)

全部谢谢

3 个答案:

答案 0 :(得分:2)

我需要猜一下,但你的班级BA也有一个名为myCJRef的成员变量,对吧?它的类型是const CJ&,就像参数一样。在这种情况下,您需要这样做:

BA::BA( const CJ& r ) : myCJRef( r )
{
  // note: myCJRef = r; would not work here.
}

因为您需要初始化成员变量。该错误不涉及您的ctor的参数。

答案 1 :(得分:1)

据推测,BA有一个非静态成员const CJ& myCJRef。引用类型对象不能保持未初始化状态,因此您需要确保构造函数的成员初始化列表初始化此引用。所以构造函数的定义如下:

BA::BA(const CJ& myCJRef)
  : myCJRef(myCJRef)
{
  // ...
}

:之后的所有内容都是成员初始化列表。在这种情况下,它表示使用参数myCJRef初始化成员myCJRef(可以说它们具有相同的名称)。

答案 2 :(得分:1)

你应该发布一些代码。 无论如何,不​​使用任何C ++ 11语法,这就是我的方式:

CJ::CJ() : BA(*this) { //CJ constructor here }

BA::BA(const CJ& myCJ) : myCJref(myCJ) { //BA constructor here }

这里我只写了CJ和BA构造函数。 BA必须拥有数据成员     const CJ& myCJref 为了这个工作。