erhalten Ich bekomme Segmentierung Fehler für diesen kurzen Code und ich bin nicht in der Lage, herauszufinden, warum.Segmentierungsfehler beim Aufruf einer virtuellen Funktion an einer abgeleiteten Klasse
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);
}
Es scheint, dass es ein Fehler mit dieser Linie
*ptr=Y_based(3);
Wenn ich es ändern zu
ptr=&Y_based(3);
ich diesen Compiler-Fehler erhalten:
taking address of temporary [-fpermissive]
Danke voraus.
Hinweis: worauf zeigt 'Ptr', wenn Sie dies tun? '* ptr = Y_basiert (3);'. – juanchopanza
Ich versuche, es auf ein Objekt von Y_based Klasse zu zeigen. Ich rufe es Konstruktor, dies zu tun –
@ Ghazal.S, Dereferenzierung eines Zeigers, der nicht initialisiert wurde oder auf ein gültiges Objekt verweist, führt zu undefiniert Verhalten. In deinem Fall ist 'ptr' ein solcher Zeiger. –