私の目的は、クラスのディープ コピーを作成することですが、仮想クラスが問題を引き起こしています。
#include<iostream>
using namespace std;
class Vir//pure virtual class
{
public:
virtual void hi()=0;
};
class Handler:public Vir
{
public:
int i;
Handler() {}
Handler(int val):i(val) {}
void hi() {cout<<"Value of i="<<i<<endl;}
int getI() const {return i;}
void setI(int j) {i=j;}
};
class ControlPanel
{
public:
Vir *v;
ControlPanel(const ControlPanel& c)//copy constructor
{
v=new Handler;
v->setI(c.getI());
}
int getI()const {return v->getI();}
void initialize() {v=new Handler(10);}
void hi() {v->hi();}
ControlPanel() {}
~ControlPanel() {delete v;}
};
int main()
{
ControlPanel cc;
cc.initialize();
cc.hi();
ControlPanel bb(cc);//copying cc into bb
}
コンパイル エラー メッセージ:
test.cpp: In copy constructor ‘ControlPanel::ControlPanel(const ControlPanel&)’:
test.cpp:28: error: ‘class Vir’ has no member named ‘setI’
test.cpp: In member function ‘int ControlPanel::getI() const’:
test.cpp:30: error: ‘class Vir’ has no member named ‘getI’
Vir から継承し、独自のメンバー (float a; や double b; など) を持つ Handler クラス (Handler1、Handler2 など) をさらにたくさん用意する予定です。したがって、すべての Handler クラスのすべての getter および setter 関数を Vir クラスに保持することは意味がありません。メンバーは Handler クラスに固有であるため、getter メソッドと setter メソッドを Handler クラスに保持したいと考えています。コンパイラは私にそうすることを許可していません。ヘルプ?