Я новичок в C++, и у меня возникла проблема с настройкой основной архитектуры. Я узнал, как использовать эту конкретную архитектуру в C#, но я не могу заставить ее работать на C++. Моя проблема заключается в следующем: у меня есть 2 объекта. Я хочу, чтобы эти объекты «знали» друг о друге, поэтому я хочу, чтобы ссылки обоих этих объектов являлись переменными-членами внутри себя.C++ Ссылки на объекты в качестве переменных-члена объектов
Рассмотрим это:
//main.cpp:
#include "Object1.h"
#include "Object2.h"
Object1 *obj1;
Object2 *obj2;
...
obj1 = new Object1(obj2);
obj2 = new Object2(obj1);
...
//Object1.h
#ifndef OBJECT1_H
#define OBJECT1_H
#include "Object2.h"
class Object1 {
public:
Object1(Object2*);
Object2 *obj;
}
#endif
//Object2.h
#ifndef OBJECT2_H
#define OBJECT2_H
#include "Object1.h"
class Object2 {
public:
Object2(Object1*);
Object1 *obj;
}
#endif
Это, однако, невозможно. Потому что без ifndef thingy у вас будет эта бесконечная итерация, включающая в себя файлы .h. Но с ifndef один из объектов не включает определение класса others и не знает, какой объект он должен создать. Вся эта проблема не возникает в C#, потому что вам не нужно включать файлы .h. У вас даже нет файлов .h: P. Когда вы создаете новый класс, каждый другой класс знает о существовании этого класса. Но в C++ вы должны включить .h конкретного класса, прежде чем можно создать объект этого класса (или ссылку даже).
Итак, мой вопрос. Как сделать 2 объекта со ссылками друг на друга в качестве переменных-членов?
Благодарим вас за интерес!
Приветствия,
Максим Шумейкер
Идея прав, но это обычно известно как упреждающее объявление, а не предварительной декларации. (И в стандарте это просто объявление. В отличие от определения, которое обеспечивает полное определение класса.) –
Спасибо, чувак, это именно то, что мне нужно ^^ –