Вероятно, глупый вопрос, но я не смог найти ответ (даже здесь).
Я разделил все свои классы в отдельных файлах (cpp + h). У меня есть методы, такие как getValue()
и setValue()
. У меня есть класс под названием Player (это в основном база данных с целым числом переменных). Я создал объект с именем player (Player *player = new Player;)
. Теперь мне нужно получить доступ к этому объекту из любого другого класса (который разделен в другом файле). Проблема в том, что я не могу даже получить доступ к getValue()/setValue()
.
Мне нужно что-то вроде в Delphi From1.player.item[0]=3
доступ из формы 2, где игрок записан.
UPD:
Вот мой код:
Player.cpp
#include "player.h"
#include "gameform.h"
Player::Player()
{
}
void Player::check(){
//I should be able to check if player dead or not from my Battle class
}
player.h
#ifndef PLAYER_H
#define PLAYER_H
class Player
{
public:
Player();
void check();
};
#endif // PLAYER_H
Battle.cpp
#include "battle.h"
#include "player.h"
#include "game.h"
Battle::Battle()
{
}
void Battle::hit(){
//if I hit I should check am I dead yet
player.check();
}
То, как Player объявлен в классе Game (сейчас):
Player *player = new Player;
Вне любых функций, просто в классе.
Где игрок является объектом, созданным в классе Game. Все вещи общедоступны.
* Я попытался создать объект в main.cpp (как внутри, так и вне функции main()), и ничего не работает, weird =/
Это ветвь github "temp", компиляция и работа. Но как получить доступ к игроку? :)
https://github.com/ewancoder/game/tree/temp
UPD: Еще один глупый вопрос: если я хочу, чтобы в моем классе 1 функция отвечала за открытие файла, а другая - за редактирование и закрытие файла, как я могу это сделать, если вы не можете читать vars из другого?
Я не уверен, что вы хотите, но если у вас есть такой класс:
a.hpp
Class A {
public:
void foo();
};
a.cpp
#include "a.hpp"
void A::foo() {}
Вы можете использовать его следующим образом:
b.hpp
#include "a.hpp"
class B {
public:
void stuff(A& a);
};
b.cpp
#include "b.hpp"
void B::stuff(A& a) { a.stuff(); }
Ваш вопрос немного трудно понять, и некоторые ответы отражают это. Однако, на мой взгляд, то, что вы используете, на самом деле является критически важной частью вашего системного дизайна. Существует много стратегий и множество соображений, но в основном вам нужно разработать пути, с помощью которых объекты могут получить доступ к содержимому других объектов в вашей запущенной программе.
Некоторые общие методы включают глобальные переменные
extern Player *PlayerOne;
PlayerOne->item[0]=3;
Статические переменные (или коллекции) в классе.
class Player {
public:
Player* Players;
}
Player::Players[0]->item[0]=3;
Переменные участника.
Board.Add(new Player(Board));
Board.m_player->item[0]=3;
Варианты бесконечны. Если вам нужен конкретный код, вам нужно быть более конкретным.
Вам нужно добавить скобки в конец инструкции и использовать оператор ->
, а не .
оператор: player->check()
Это потому, что это указатель на Player *player
а не сам объект Player player
::
будет использовать метод без объекта
Вы должны дать другому объекту ссылку первого. Либо прямо в конструкторе, либо позже с помощью метода.
Или, альтернативно, вы можете хранить игрока в глобальной переменной и обращаться к нему через глобальную переменную.
Проблема в том, что методы привязаны к конкретному экземпляру объекта - и поэтому вам нужен этот экземпляр для их вызова
Player
. Кажется, ваши методы все частные. Доступthis
странно. Каково ваше намерение?