我们创建了一个class CJ
,它会创建一个不同的class BA
对象,该对象想要向其自身传递引用,如下所示:
BA:BA(const CJ& myCJRef);
编译器始终会出现以下错误:
CJRef
在BA
类中定义为类类型CJ
现在,数量的
&
,*
或什么都不做,只会导致相同的错误。初始化很困难,因为myCJRef
的初始化需要传递另外两个类,但是它会指向错误的对象。我是个“C”家伙……这真令人困惑。
谢谢大家!
按照以下答案,我到达了使用该指针调用CJ对象中的方法的地步,真实代码如下:
InputPoolBufferAdapter::InputPoolBufferAdapter(CJpsMixerChannel&_CJ,int抖动,int maxBuffers,无符号长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:在成员函数“虚拟无效InputPoolBufferAdapter::returnDataBufferToPool(ChannelBuffer_t)”中:
InputPoolBufferAdapter.cpp:33:50:错误:“->”标记之前的预期初始化程序
InputPoolBufferAdapter.cpp:在成员函数“virtual void InputPoolBufferAdapter::notifyDataAvailable()”中:
InputPoolBufferAdapter.cpp:38:32:错误:“。” token 之前的预期初始化程序
InputPoolBufferAdapter.cpp:在成员函数“虚拟无效InputPoolBufferAdapter::bufferAdapterError(int)”中:
InputPoolBufferAdapter.cpp:43:32:错误:“。” token 之前的预期初始化程序
我不知所措,对此的任何想法都不再“困惑”,而绝对是“迷惑”的软件专家(我不敢相信在“C”嵌入式系统中使用25年后,这会把我搞砸了!)。
谢谢大家
最佳答案
您应该发布一些代码。
无论如何,不使用任何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
为此工作。