引用不同类中的指针成员 [英] Referencing to a pointer member in a different class
问题描述
我有注
和跟踪
类, * 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: http://ideone.com/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);
这篇关于引用不同类中的指针成员的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!