我有一个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 ¬e);
正如您所看到的,我正在使用引用,因为此方法经常被调用,我无法复制该对象。所以我的问题是:任何想法我怎么能做到这一点?或者可能将我的模型改为可以工作的东西?
修改
我忘了提到我也尝试过使用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 ¬e);
};
答案 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 ¬e)=0;
//this will force all derived classes to implement it
但是如果你不需要它,你必须在基类中实现虚函数:
virtual float getSample(Note ¬e){}