无法将"this"的引用传递给另一个类的构造函数
Unable to pass a reference of 'this' to a constructor of another class
我们有一个class CJ
,在它创建时,它创建了一个不同的class BA
对象,它想要传递一个对自己的引用,如下所示:
BA:BA(const CJ& myCJRef);
编译器总是出错:
错误:未初始化的引用成员BA::myCJRef
CJRef
在BA
类中定义为类类型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:错误:' -> '令牌之前期望初始化器在成员函数' virtual void InputPoolBufferAdapter::notifyDataAvailable() '中:InputPoolBufferAdapter.cpp:38:32: error: expected initializer before。"令牌在成员函数' virtual void InputPoolBufferAdapter::bufferAdapterError(int) '中:InputPoolBufferAdapter.cpp:43:32: error: expected initializer before。"令牌
我很困惑,对于这个不再"困惑"但绝对是"困惑"的软件家伙,还有什么想法吗(我不敢相信,在C嵌入式系统工作了25年之后,这让我如此困惑!)
谢谢所有的
我需要猜测一下,但是您的类BA
也有一个名为myCJRef
的成员变量,对吗?它的类型是const CJ&
,就像参数一样。在这种情况下,您需要这样做:
BA::BA( const CJ& r ) : myCJRef( r )
{
// note: myCJRef = r; would not work here.
}
,因为需要初始化成员变量。
您应该发布一些代码。无论如何,在不使用任何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
假设BA
有一个非静态成员const CJ& myCJRef
。引用类型对象不能不初始化,因此需要确保该引用已由构造函数的成员初始化列表初始化。因此,构造函数的定义如下所示:
BA::BA(const CJ& myCJRef)
: myCJRef(myCJRef)
{
// ...
}
:
之后的都是成员初始化列表。在本例中,它说用参数myCJRef
初始化成员myCJRef
(它们具有相同的名称是可以的)。
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 关于复制构造函数的一个棘手问题
- C++构造函数,一个用于度,一个用于弧度
- 关于QLIST类型实例复制构造函数的一个奇怪问题
- 需要使班级(long_number)用构造函数和一个打印功能代表1到60的任何长度
- 运算符 = 不匹配,构造函数创建一个指针
- 为什么我不能在 c++ 类中声明一个空构造函数,该构造函数从一个具有私有构造函数的构造函数扩展而来
- 如何使构造函数接受一个非常量对象
- 初始值设定项列表,可变参数模板和构造函数推导:一个奇怪的情况
- shared_ptr的原始指针构造函数是一个错误吗?
- 当这个构造函数接受一个初始值设定项列表并委托一个向量时,是什么导致它委托给自己
- C++11使variadic构造函数了解一个初始化列表的初始化列表
- 为什么这个initializer_list构造函数是一个可行的重载
- 为什么我的Arduino类构造函数需要一个参数
- 内联构造函数和一个定义规则
- 如何通过构造函数将一个类的实例传递给另一个类
- 如何用g++构造在另一个文件中定义的类
- 在另一个类中使用自定义构造函数声明一个类
- 如何从另一个构造函数调用一个c++类的构造函数
- 模板中的构造函数不同:一个用于字符串,另一个用于其他任何东西