If you're initializing a field with another struct of the same type, then you need a copy constructor:
struct ValueStruct { string field1; ValueStruct(string f1) : field1(f1) {}; ValueStruct(const ValueStruct& other) : field1(other.field1) {} };
In your case this would also work since that's the constructor the struct has (but I prefer doing the above one):
class Complex3ValueStruct { public: ValueStruct mVs; Complex3ValueStruct(string valueString) : mVs(valueString) {} };
If you're initializing a field with another struct of the same type, then you need a copy constructor:
In your case this would also work since that's the constructor the struct has (but I prefer doing the above one):
Thank you! I see my mistake, I thought that this `mVs(...)` would act as a kind of magic assignment, but I realize now that it is a call to the constructor of `ValueStruct`, so it needs to match the arguments.
My original problem was to define own classes to hold 3rd party object instances, that's why I made that toy example, as I was getting the same problem. Which I fixed by storing an object pointer of the 3rd party object inside my object. BUT I'm not still 100% sure this is the way to go... Because I cannot create copy constructors for classes I do not own.
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Hi there, could someone point out what's preventing this simple code to compile?
The compiler tells first an ERROR, then a warning:
ERROR: 'valueStruct' - parameter conversion not allowed
WARN: implicit conversion from 'number' to 'string'
Both on the list initializer line:
I don't want to declare default constructors, so how could I make the above to compile?
And most important, how would I make this toy example work/compile with 3rd party classes I do not own? -I need to put an object of 3rd party class inside another object of my own.
Thanks!