我有注和跟踪类, * generator 成员。当我创建新的注意对象时,我想链接生成器成员注意到跟踪,但我不知道如何做。
I have a Note and a Track class which both *generator member. When I create new Note objects I want to link the generator member of Note to that of Track but I can't figure out how to do this.
#include <iostream> using namespace std; class Generator { public: virtual float getSample(int sample)=0; }; class Note { public: Generator *generator; // THIS IS WHAT IS CAUSING ME TROUBLE Note(Generator *aGen){ generator = aGen; } }; class Synth : public Generator{ public: virtual float getSample(int sample); int varA; int varB; Synth(){ varA = 5; varB = 8; } }; float Synth::getSample(int sample){ varA = sample; varB = 3; return 0; } class Track { public: Generator *generator; Track(){ generator = new Synth(); } }; int main() { cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!! Track track = Track(); cout << "test" << endl; return 0; }我想像这样做,但它不工作:
I thought of doing something like this, but it's not working:
Track track = Track(); Note n = Note(&track.generator);错误
prog.cpp: In function ‘int main()’: prog.cpp:48:35: error: no matching function for call to ‘Note::Note(Generator**)’ prog.cpp:48:35: note: candidates are: prog.cpp:13:5: note: Note::Note(Generator*) prog.cpp:13:5: note: no known conversion for argument 1 from ‘Generator**’ to ‘Generator*’ prog.cpp:9:7: note: Note::Note(const Note&) prog.cpp:9:7: note: no known conversion for argument 1 from ‘Generator**’ to ‘const Note&’ prog.cpp:48:10: warning: unused variable ‘n’ [-Wunused-variable] - See more at: ideone/E38ibe#sthash.V3QMcYJQ.dpuf此处的示例。
推荐答案正如编译器告诉你,这行:
As the compiler is telling you, this line:
Note n = Note(&track.generator);尝试构建注意 生成器** 到它的构造函数中(因为 track.generator 有类型 Generator * ,& track.generator 有类型 Generator ** )。
Tries to construct a Note and supply a Generator** to its constructor (since track.generator has type Generator*, &track.generator has type Generator**).
但是, Note 类构造函数接受 Generator * ,而不是 Generator ** 。只需这样做(注意,复制初始化在这里是不必要的,而是使用直接初始化):
However, your Note class constructor accepts a Generator*, not a Generator**. Just do this instead (notice, that copy-initialization is unnecessary here, rather use direct-initialization):
Track track; Note n(track.generator);更多推荐
引用不同类中的指针成员
发布评论