引用不同类中的指针成员

时间:2013-03-03 13:23:17

标签: c++ pointers reference member

我有一个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);

Live example here.

2 个答案:

答案 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);
相关问题