2015-12-01 4 views
1

Я хочу иметь 1 класс, который содержит все объекты для моих других классов. Итак, например: Если класс игрока хочет член класса врага, я хочу получить доступ к классу врагов, используя этот класс 1.C++ Как получить доступ к объекту другого класса?

Пример:

class objectHolder{ 
public: 
    enemyClass enemy; 
}; 

class enemyClass{ 
public: 
    void member(); 
}; 

class player{ 
public: 
    objectHolder oh; 
    oh.enemy.member(); //I KNOW THIS IS ILLEGAL BUT I NEED SOMETHING LIKE THIS 
}; 

Я знаю, что код является некорректным и не компилирует хорошо, но я надеюсь, что вы получите эту идею. Кто-нибудь знает, как это сделать на самом деле? Потому что мне действительно нужен 1 класс, доступ к которому могут получить все классы. Каждый класс может вызывать геттеры и сеттеры и прочее из других классов, используя один большой класс.

Надеюсь, я был достаточно ясен, спасибо заранее.

+0

Забавно, что кто-то не любит мой вопрос без причины или даже не зная, как это сделать. Если вы не знаете ответа, чем уходите? – OpenGLmaster1992

+0

долго писать код C++, но где вы создавали экземпляр объекта oh (= new objectHolder), также, тот же случай для врага. Более того, законно называть oh.enemy.member(), поскольку член является публичным, а враг является публичным. –

+1

Я просто очень смущен тем, что вы пытаетесь сделать здесь. –

ответ

2

oh.enemy.member(); является совершенно законным С ++, поскольку все участвующие члены имеют доступ к public. Там, где вы выразились, это не имеет никакого смысла, поскольку утверждения могут появляться только в теле функции.

+0

Так object.object.member() является законным? Что я здесь делаю неправильно? – OpenGLmaster1992

+0

Это законно в методе, а не в определении класса. – sergej

+0

Спасибо! Я просто недопонимал, но теперь все мои проблемы решены, спасибо! – OpenGLmaster1992

1

1) Сделать одноэлементно

2) Инициализировать его & включают все объекты, которые вы хотите провести.

3) Получите доступ к экземпляру singleton из любой точки мира.

4) Поймите, что это ужасный способ структурирования вашей программы.

0

Вы не можете вызвать функцию в теле класса ... попробуйте этот код может полезно

class enemyClass{ 
public: 
void member(){std::cout<<"Test";} 
}; 
class objectHolder{ 
public: 
enemyClass enemy; 
enemyClass getEnemy(){return enemy;} 
}; 

class player{ 
public: 
objectHolder oh; 
void getresult(){oh.getob().member();} 
}; 
int main() 
{ 
player p; 
p.getresult(); 
} 
+0

Это была идея, вы даже прочитали мой пост? – OpenGLmaster1992

+0

да, я прочитал его. как я думаю, я использовал ту же идею для доступа. логично, что вы упомянули, правильно, но позиция вашего заявления я не думаю в нужном месте @HugoCornel – 0xFFFFFF

+0

Возможно, это мой английский, что делает его неясным. Мой английский - это sh * t. – OpenGLmaster1992

Смежные вопросы