11

我有一个类构造函数,它期望对另一个类对象的引用作为参数传入。我知道当不执行指针算术或不存在空值时,引用比指针更可取。

这是构造函数的头声明:

class MixerLine {

private:
    MIXERLINE _mixerLine;
    
public:

    MixerLine(const MixerDevice& const parentMixer, DWORD destinationIndex); 

    ~MixerLine();
}

这是调用构造函数(MixerDevice.cpp)的代码:

void MixerDevice::enumerateLines() {
    
    DWORD numLines = getDestinationCount();
    for(DWORD i=0;i<numLines;i++) {
        
        MixerLine mixerLine( this, i );
        // other code here removed
    }
}

MixerDevice.cpp 的编译失败并出现以下错误:

错误 3 错误 C2664: 'MixerLine::MixerLine(const MixerDevice &,DWORD)' : 无法将参数 1 从 'MixerDevice *const' 转换为 'const MixerDevice &'

但我认为指针值可以分配给引用,例如

Foo* foo = new Foo();
Foo& bar = foo;
4

4 回答 4

17

this是一个指针,要获得引用,您必须取消引用 ( *this) 它:

MixerLine mixerLine( *this, i );
于 2012-06-23T14:52:21.523 回答
3

您应该取消引用this,因为this是指针,而不是引用。要更正您的代码,您应该编写

for(DWORD i=0;i<numLines;i++) {

    MixerLine mixerLine( *this, i ); // Ok, this dereferenced
    // other code here removed
}

注意:const构造函数参数的第二个const MixerDevice& const parentMixer是完全没用的。

于 2012-06-23T15:11:35.920 回答
1

如前所述,要从指针获取引用,您需要取消对指针的引用。此外(可能是由于复制到问题中?)构造函数不应该编译:

const MixerDevice& const parentMixer

那不是正确的类型,引用不能是 const 限定的,只有被引用的类型可以是,所以两个(完全等价的)选项是:

const MixerDevice& parentMixer
MixerDevice const& parentMixer

(请注意,可以通过任何一种方式进行const限定MixerDevice,并且含义完全相同)。

于 2012-06-23T15:20:47.430 回答
0

指针值可以分配给指针,但不能分配给引用!1

Foo* foo = new Foo();
Foo& bar = *foo;
           ^
           ^


1. 好吧,它们可以用来初始化对指针的引用,但这不是你在这里所拥有的......

于 2012-06-23T14:52:09.480 回答