我有一个Note
和一个Track
类,*generator
成员。当我创建新的Note
个对象时,我想将generator
的{{1}}成员与Note
的成员相关联,但我无法弄清楚如何执行此操作。
Track
我想过做这样的事情,但它不起作用:
#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;
}
错误
Track track = Track();
Note n = Note(&track.generator);
答案 0 :(得分:1)
track.generator
已指向Generator
,您无需取其地址。
留下来
Node n = Node(track.generator); // without & operator
更新了代码:http://ideone.com/fAA4JX
答案 1 :(得分:0)
正如编译器告诉你的那样,这一行:
Note n = Note(&track.generator);
尝试构建Note
并为其构造函数提供Generator**
(因为track.generator
的类型为Generator*
,&track.generator
的类型为Generator**
)。
但是,您的Note
类构造函数接受Generator*
,而不是Generator**
。只需这样做(注意,这里不需要复制初始化,而是使用直接初始化):
Track track;
Note n(track.generator);