首页 文章

C通过引用将“this”传递给方法

提问于
浏览
2

我有一个类构造函数,期望引用另一个类对象作为参数传入 . 据我所知,当没有执行指针算术或不存在空值时,引用优于指针 .

这是构造函数的头声明:

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 回答

  • 0

    this 是一个指针,用于获取必须取消引用的引用( *this )它:

    MixerLine mixerLine( *this, i );
    
  • 2

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

    for(DWORD i=0;i<numLines;i++) {
    
        MixerLine mixerLine( *this, i ); // Ok, this dereferenced
        // other code here removed
    }
    

    Note: 构造函数参数 const MixerDevice& const parentMixer 中的第二个 const 完全没用 .

  • 8

    要从指针获取引用,您需要取消引用指针,如已经提到的那样 . 另外(可能是由于复制到问题?)构造函数不应该编译:

    const MixerDevice& const parentMixer
    

    这不是一个合适的类型,引用不能是const限定的,只有引用的类型可以,所以两个(完全等价的)选项是:

    const MixerDevice& parentMixer
    MixerDevice const& parentMixer
    

    (注意 MixerDeviceconst 资格可以在任何一种方式完成,它意味着完全相同) .

  • 1

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

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

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

相关问题