この短いコードでセグメンテーションフォルトが発生しており、その理由を特定できません。派生クラスで仮想関数を呼び出すときにセグメンテーションフォールトを取得する
taking address of temporary [-fpermissive]
おかげで:
class XorY {
public:
virtual void set_cost(double& cost){}
};
class X_based:public XorY {
public:
X_based(int _x):x(_x){}
void set_cost(double& cost)
{
cost=cost*(100-x)/100;
}
int x;
};
class Y_based:public XorY
{
public:
Y_based(){}
Y_based(int _y): y(_y){}
void set_cost(double& cost){
cost=cost-y;
}
int y;
};
int main(){
double a=2;
XorY* type;
Y_based* ptr;
*ptr=Y_based(3);
type=ptr;
type->set_cost(a);
}
私が私がこのコンパイルエラーを取得
ptr=&Y_based(3);
にそれを変更するには、このライン
*ptr=Y_based(3);
との誤差がありますようです前進。
ヒント:これを行うとき、 'ptr'は何を指していますか? '* ptr = Y_based(3);'。 – juanchopanza
私はY_basedクラスのオブジェクトを指し示すようにしようとしています。それを行うコンストラクタを呼び出しています。 –
@ Ghazal.S、初期化されていないポインタを逆参照する、または有効なオブジェクトを指すように設定されていると、動作。あなたの場合、 'ptr'はそのようなポインタです。 –