Use GetPointer(this)
amir_avatar: Use GetPointer(this)
|
|
not when 2 objects pointing at each other, then pointer is preffered
You can't save a reference, there is no other option.
you can get its pointer and save it. but regardless, even if you have only 2 objects one has a reference to the other it wont compile. only pointers to each other.
I have problems with compiling. As i understand the compiler doesn't see one class before making another one. Container contains Object, but Object class doesn't exist when compiler needs it. What can i do with that situation?
//+------------------------------------------------------------------+ //| Copyright 2015, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property strict class Container { public: Object* object; double m_Price; Container(double price) { m_Price = price; } double getPrice(){ return m_Price; } void addObject() { object = new Object(GetPointer(this), m_Price); Object* obj = object.whatIsYourContainer(); Print(obj.getPrice()); } }; class Object { public: double objectPrice; Container* container; Object(Container* Container, double Price) { objectPrice = Price; container = Container; } Container* whatIsYourContainer() { return container; } double getPrice() { return objectPrice; } } //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- Container* c = new Container(1.31200); c.addObject(); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+
may be i need to declare the classes in some global space?
Error list:
'Object' - declaration without type 'Container' - structure identifier cannot be used 'int' - semicolon expected 'int' - name expected 'c' - declaration without type 'return' - expressions are not allowed on a global scope '}' - expressions are not allowed on a global scope 'object' - undeclared identifier '=' - illegal operation use 'whatIsYourContainer' - object pointer expected 'Container' - structure identifier cannot be used ';' - unexpected token '=' - operand expected
you need forward definition of Object, before Container put:
class Object;
and then go on with
class Container {
public:
.....
I havn't tried it but it should work
you need forward definition of Object, before Container put:
class Object;
and then go on with
class Container {
public:
.....
I havn't tried it but it should work
Sadly no. If i just put Object class definition before Container it can't compile. If i add just one line class Object; it can't compile too.
class Container; class Object { public: double objectPrice; Container* container; Object(Container* Container, double Price) { objectPrice = Price; container = Container; } Container* whatIsYourContainer() { return container; } double getPrice() { return objectPrice; } }; class Container { public: Object* object; double m_Price; Container(double price) { m_Price = price; } double getPrice(){ return m_Price; } void addObject() { object = new Object(GetPointer(this), m_Price); Object* obj = object.whatIsYourContainer(); Print(obj.getPrice()); } };
errors:
'Container' - structure identifier cannot be used 'Container' - structure identifier cannot be used ';' - unexpected token '=' - operand expected '=' - type mismatch
if i delete "class Container;" line there are more errors :-/
What I meant is that you do like you did first time, but add forward class definition like this:
class Object; // <-- this line you need to add
class Container {
public:
Object* object;
double m_Price;
Container(double price) { m_Price = price; }
double getPrice(){ return m_Price; }
void addObject() {
object = new Object(GetPointer(this), m_Price);
Object* obj = object.whatIsYourContainer();
Print(obj.getPrice());
}
};
class Object {
public:
double objectPrice;
Container* container;
Object(Container* Container, double Price) {
objectPrice = Price;
container = Container;
}
Container* whatIsYourContainer() {
return container;
}
double getPrice() {
return objectPrice;
}
}
- 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
is there any way to use current object as a parameter? JavaScript have "this", what can i use to make same functionality in MQL4?
For example: