Господа, подскажите, пожалуйста! Не могу разобраться. У меня есть два класса, которые реализуют некоторый функционал. Создаются объекты обеих классов (автоматически). Мне хотелось бы обращаться к данным одного класса 1 из класса 2 и к данным класса 2 из класса 1. Очевидно, что первое реализуется, если я в классе 1 создаю объект класса 2. Но как при этом реализовать второе? Если я пытаюсь еще определить в классе 2 объект класса 1, то компилятор выдает ошибку на строке с определение класса 2 в классе 1 "unexpected token, probably type is missing?", хотя выше по тексту есть #include "Class2.mqh". Ну я чувствую, что тут что-то фундаментально неправильное, но как сделать правильно?
- Ошибки, баги, вопросы
- ООП для школьников.
- Вопросы от начинающих MQL4 MT4 MetaTrader 4
Forward Declarations: https://www.geeksforgeeks.org/what-are-forward-declarations-in-c/#:~:text=In%20C%2B%2B%2C%20Forward%20declarations,class%20A%7B%20%2F%2F%20Body%20%7D%3B
What are Forward declarations in C++ - GeeksforGeeks
- www.geeksforgeeks.org
A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.
8vlma:
Господа, подскажите, пожалуйста! Не могу разобраться. У меня есть два класса, которые реализуют некоторый функционал. Создаются объекты обеих классов (автоматически). Мне хотелось бы обращаться к данным одного класса 1 из класса 2 и к данным класса 2 из класса 1. Очевидно, что первое реализуется, если я в классе 1 создаю объект класса 2. Но как при этом реализовать второе? Если я пытаюсь еще определить в классе 2 объект класса 1, то компилятор выдает ошибку на строке с определение класса 2 в классе 1 "unexpected token, probably type is missing?", хотя выше по тексту есть #include "Class2.mqh". Ну я чувствую, что тут что-то фундаментально неправильное, но как сделать правильно?
Не понятно, что именно Вы хотите достичь.Господа, подскажите, пожалуйста! Не могу разобраться. У меня есть два класса, которые реализуют некоторый функционал. Создаются объекты обеих классов (автоматически). Мне хотелось бы обращаться к данным одного класса 1 из класса 2 и к данным класса 2 из класса 1. Очевидно, что первое реализуется, если я в классе 1 создаю объект класса 2. Но как при этом реализовать второе? Если я пытаюсь еще определить в классе 2 объект класса 1, то компилятор выдает ошибку на строке с определение класса 2 в классе 1 "unexpected token, probably type is missing?", хотя выше по тексту есть #include "Class2.mqh". Ну я чувствую, что тут что-то фундаментально неправильное, но как сделать правильно?
Не понятно, что за обращение к данным другого класса? Класс - тип данных, подобен структуре. В классе нет данных, данные в объектах.
Если Вы хотите из объекта класса A обращаться к данным объекта класса B, тогда Вы должны позаботиться:
1) о доступности этих данных вне области видимости класса;
2) о доступности объектов друг для друга.
Т.е., если я правильно понял Вашу проблему, в классах нужны ссылки на объекты, а также методы для установки их значений(типа, SetA(A &) и SetB(B &)). В программном коде связываете объекты посредством ссылок и обращаетесь к данным/методам объектов.
PS. Про декларации Вам уже подсказали.
PPS. То что Вы задумали с объектами внутри классов работать не будет.
8vlma:
Ну я чувствую, что тут что-то фундаментально неправильное, но как сделать правильно?
Ну я чувствую, что тут что-то фундаментально неправильное, но как сделать правильно?
Написать класс 3 в котором использовать классы 1,2
Igor Makanu #:
Forward Declarations: https://www.geeksforgeeks.org/what-are-forward-declarations-in-c/#:~:text=In%20C%2B%2B%2C%20Forward%20declarations,class%20A%7B%20%2F%2F%20Body%20%7D%3B
Forward Declarations: https://www.geeksforgeeks.org/what-are-forward-declarations-in-c/#:~:text=In%20C%2B%2B%2C%20Forward%20declarations,class%20A%7B%20%2F%2F%20Body%20%7D%3B
Да, большое спасибо! Сработало
Sergey Gridnev #:
Не понятно, что именно Вы хотите достичь
...
PPS. То что Вы задумали с объектами внутри классов работать не будет.
class CClass2; class CClass1 { public: CClass2 *C2; int A1; CClass1(void){}; ~CClass1(void){}; void PrintOwn(){Print("C1 own var A1 ", A1);}; void PrintOther(){Print("From C1 A2 ", C2.A2);}; }; class CClass2 { public: CClass1 *C1; int A2; CClass2(void){}; ~CClass2(void){}; void PrintOwn(){Print("C2 own var A2 ", A2);}; void PrintOther(){Print("From C2 A1 ", C1.A1);}; }; void OnStart() { CClass1 Class1; CClass2 Class2; Class1.C2 = &Class2; Class2.C1 = &Class1; Class1.A1 = 1; Class2.A2 = 2; Class1.PrintOwn(); Class2.PrintOwn(); Class1.PrintOther(); Class2.PrintOther(); }
Работает с forward declarations. Спасибо!
8vlma:
Господа, подскажите, пожалуйста! Не могу разобраться. У меня есть два класса, которые реализуют некоторый функционал. Создаются объекты обеих классов (автоматически). Мне хотелось бы обращаться к данным одного класса 1 из класса 2 и к данным класса 2 из класса 1. Очевидно, что первое реализуется, если я в классе 1 создаю объект класса 2. Но как при этом реализовать второе? Если я пытаюсь еще определить в классе 2 объект класса 1, то компилятор выдает ошибку на строке с определение класса 2 в классе 1 "unexpected token, probably type is missing?", хотя выше по тексту есть #include "Class2.mqh". Ну я чувствую, что тут что-то фундаментально неправильное, но как сделать правильно?
Похоже вы пытаетесь написать спагетти код. Так делать нельзя. Черевато нулевой читаемостью кода и регулярными падениями. То, что вы пишите является так называемым ***. Пересмотрите архитектуру.
Господа, подскажите, пожалуйста! Не могу разобраться. У меня есть два класса, которые реализуют некоторый функционал. Создаются объекты обеих классов (автоматически). Мне хотелось бы обращаться к данным одного класса 1 из класса 2 и к данным класса 2 из класса 1. Очевидно, что первое реализуется, если я в классе 1 создаю объект класса 2. Но как при этом реализовать второе? Если я пытаюсь еще определить в классе 2 объект класса 1, то компилятор выдает ошибку на строке с определение класса 2 в классе 1 "unexpected token, probably type is missing?", хотя выше по тексту есть #include "Class2.mqh". Ну я чувствую, что тут что-то фундаментально неправильное, но как сделать правильно?
как оказалось , решение напоминает "список"
Приведите пример, когда без перекрестных ссылок не обойтись? Спагетти код всегда являлся "***", который усложняет дебаг и чтение кода. Если у вас не получается обойтись без перекрестных ссылок - значит у вас большая ошибка в архитектуре. В 100% случаев можно обойтись без этого.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь