2015-07-29 8 views
-2

Я пытаюсь написать свой код, не используя глобальную переменную, поскольку большинство людей сказали мне, что это была плохая привычка, поэтому я изменяю, как работает моя программа.C++ передача векторного класса другому классу

У меня возникла проблема с передачей нескольких экземпляров класса другому классу. Мне нужно иметь возможность модифицировать несколько экземпляров класса в другом классе.

Вот что я пытаюсь сделать, но терпеть неудачу в этом:

int main() { 
Players *player[6]; 

//preparing 6 instances of Players() so I can loop through them in another class 
for (int i = 0;i<6;i++){ 
player[i] = new Players(); 
} 
player[0]->name = "fluffy"; 

Players.h

#ifndef PLAYERS_H_ 
#define PLAYERS_H_ 
#include <string> 
#include <vector> 

class Players { 
public: 
    Players(); 
    virtual ~Players(); 
    std::string name; 
    bool hand; 
    int cif; 
    int id; 
    std::vector<int> autho; 
    std::vector<int> collec; 
    std::vector < std::vector <int> > puppet; 
}; 
#endif /* PLAYERS_H_ */ 

Players.cpp

#include "Players.h" 
Players::Players() { 
// TODO Auto-generated constructor stub 
    name = ""; 
    hand = false; 
    cif = -1; 
    id = -1; 
} 

Players::~Players() { 
    // TODO Auto-generated destructor stub 
} 

Теперь я хочу позвонить другой класс (неважно, какой), и я хочу передать ему многоуровневые классные игроки, чтобы он мог читать и выполнять модификацию данные в этих инстанцированных классах.

Например, класс с функцией, которая может читать проигрыватель [0] -> имя и изменить его «шкурку»

Как бы вы подойти к этому, не получая ошибки компилятора?

Я открыт для предложений по совершенно другому подойти к этому (я пытался использовать структуры переменных и передать его, но у меня другие проблемы, а)

отблагодарить вас, Kavén

+0

Покажите свой код и ошибку, которую вы получаете. – melpomene

+0

Не могли бы вы добавить текст ошибки в свой вопрос? –

+0

Каков ваш «другой класс» и его метод, в который вы хотите передать свой множественный экземпляр? Покажите код этого. – simon

ответ

1

я предлагаю подойти так:

int main() 
{ 
unique_ptr<vector<Player>> playersVector (new vector<Player>); 

    for (int i = 0;i<6;i++) 
    { 
     playersVector->push_back(Players()); 
    } 
    playersVector->at(0).name = "fluffy"; 
} 

И затем, если вы хотите, чтобы передать этот вектор с правом собственности на какой-то метод или класс использования:

move(playersVector) 

Если вы хотите иметь право собственности на основной класс пропускается нормальным указателем:

playersVector.get() 

Я также предлагаю использовать методы Get/Set вместо доступа к c лассовые поля

+0

Вы знаете, что у ОП был массив указателей на игрока, и у вас есть указатель на массив/вектор игроков? Не сказать, что это неправильно, просто интересно, если это специально? – MikeMB

+0

Я только что предложил одну из возможностей.OP не задавал условий, как именно он хочет справиться с проблемой, поэтому я просто предоставил одно из возможных решений. Но, как вы упомянули, мое предложение отличается от OP. – Springfield762

2

Первый из всех, я бы подошел к этому, используя std::vector<Players> (не указатели!). Во-вторых, я просто передаю этот вектор по ссылке на другие функции.

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