The new
expression returns a pointer so you just have to do :
Wav* wave = new Wav("asf", DOUBLE)->Emphasize();
// ^^
Also your method Emphasize
return a reference on a Signal object :
Signal& Emphasize() {
// ^ Reference
return *this;
}
But you are trying to assign this reference to a pointer Wav*
.
You have two choices here :
// ...
Signal* Emphasize() {
return this;
}
// ...
Wav* wave = new Wav("asf", DOUBLE)->Emphasize();
Or you keep you initiale Emphasize
method :
// ...
Signal& Emphasize() {
return *this;
}
// ...
Wav wave = new Wav("asf", DOUBLE)->Emphasize();
EDIT :
Ok the real error is that you are trying to convert a Signal
object into Wav
object.
There is no convertion from Signal
to Wav
object.
A Wav is a Signal but a Signal is not a Wav.
You can do something like :
Inside your Signal
class :
virtual Signal& Emphasize()=0;
And inside your Wav
class :
Wav& Emphasize()
{
return *this;
}
OR
Signal w = new Wav( "asf", DOUBLE )->Emphasize();