将当前对象传递给方法,引用或指针

时间:2012-11-02 13:13:50

标签: c++ reference pass-by-reference

我有一个Track类,其中包含一个包含Note个对象的多图成员。 Note类的一种方法是:

float Note::getValue(){
    float sample = generator->getSample(this); // not working
    return sample;
}

Note也有Generator类型的成员,我需要调用该类的getSample方法,该方法需要Note作为参数。我需要传递当前的Note对象,并尝试使用关键字this,但这不起作用并向我提供错误Non-const lvalue reference to type 'Note' cannot bind to a temporary of type 'Note *'

这就是getSample的方法定义:

virtual float getSample(Note &note);

正如您所看到的,我正在使用引用,因为此方法经常被调用,我无法复制该对象。所以我的问题是:任何想法我怎么能做到这一点?或者可能将我的模型改为可以工作的东西?

修改

我忘了提到我也尝试过使用generator->getSample(*this);,但这也没用。我收到此错误消息:

Undefined symbols for architecture i386:
  "typeinfo for Generator", referenced from:
      typeinfo for Synth in Synth.o
  "vtable for Generator", referenced from:
      Generator::Generator(Generator const&) in InstrumentGridViewController.o
      Generator::Generator() in Synth.o
      Generator::Generator(Generator const&) in InstrumentGridViewController.o
      Generator::Generator() in Synth.o
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

这就是我的Generator类的样子(getSample方法在子类中实现):

class Generator{
public:
    virtual float getSample(Note &note);

};

4 个答案:

答案 0 :(得分:3)

this是一个指针,您的代码需要引用。试试这个

float sample = generator->getSample(*this);

答案 1 :(得分:2)

this是C ++中的指针,因此您需要

float sample = generator->getSample(*this);

答案 2 :(得分:1)

传递引用,而不是指向getSample()的指针。这是这样写的:

float Note::getValue(){
    float sample = generator->getSample(*this);
    return sample;
}

答案 3 :(得分:0)

您必须将Generator类声明为抽象,请尝试此声明:

virtual float getSample(Note &note)=0; 
//this will force all derived classes to implement it

但是如果你不需要它,你必须在基类中实现虚函数:

virtual float getSample(Note &note){}