Как получить доступ к функции из другого класса?

0

Вероятно, глупый вопрос, но я не смог найти ответ (даже здесь).

Я разделил все свои классы в отдельных файлах (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 из другого?

  • 0
    Какую ошибку вы получаете?
  • 1
    Разместите объявление Player . Кажется, ваши методы все частные. Доступ this странно. Каково ваше намерение?
Показать ещё 10 комментариев
Теги:
class
methods
function

4 ответа

1

Я не уверен, что вы хотите, но если у вас есть такой класс:

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(); }
0

Ваш вопрос немного трудно понять, и некоторые ответы отражают это. Однако, на мой взгляд, то, что вы используете, на самом деле является критически важной частью вашего системного дизайна. Существует много стратегий и множество соображений, но в основном вам нужно разработать пути, с помощью которых объекты могут получить доступ к содержимому других объектов в вашей запущенной программе.

Некоторые общие методы включают глобальные переменные

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;

Варианты бесконечны. Если вам нужен конкретный код, вам нужно быть более конкретным.

  • 0
    Теперь я подумал, что это все, попробовал переменную extern - ничего не получалось, даже если я поставил extern Player * PlayerOne; в main.cpp. Я не могу сделать PlayerOne-> item из другого класса (C ++ говорит, что не было объявлено в этой области = /)
0

Вам нужно добавить скобки в конец инструкции и использовать оператор ->, а не . оператор: player->check()

Это потому, что это указатель на Player *player а не сам объект Player player

  • 0
    Извини, мой плохой, просто опечатка. Во всяком случае, все отлично написано, я даже пробовал -> и :: варианты. Мне нужен какой-то способ C ++, который я не знаю, чтобы заставить его работать.
  • 0
    Использование оператора :: будет использовать метод без объекта
0

Вы должны дать другому объекту ссылку первого. Либо прямо в конструкторе, либо позже с помощью метода.

Или, альтернативно, вы можете хранить игрока в глобальной переменной и обращаться к нему через глобальную переменную.

Проблема в том, что методы привязаны к конкретному экземпляру объекта - и поэтому вам нужен этот экземпляр для их вызова

  • 0
    Да, было немного неясно, я имею в виду, что вы можете сделать его глобальным - тогда вы можете получить доступ к переменной из любого места

Ещё вопросы

Сообщество Overcoder
Наверх
Меню