2015-05-07 2 views
0

Я хотел бы, чтобы распечатать содержимое из вектора, который находится в моем классе Советапечати содержимого вектора класса

class Board { 
public: 
    Board(const string &filename); 


private: 
    int numLines, numColumns; 
    vector<Ship> ships; 
    vector <vector <int> > board; 

}; 

Класс судна:

class Ship { 
public: 
    Ship(char symb, PositionChar pos, char ori, unsigned int tam, unsigned int cor); 

private: 

    char symbol; 
    PositionChar position; 

    char orientation; 
    unsigned int size; 
    unsigned int color; 
    string status; 


}; 

Почему я не могу сделать что-то вроде этого?

cout << b1.ships[1].color << endl; 

просто чтобы проверить OFC

С наилучшими пожеланиями

ответ

1

Почему я не могу сделать что-то вроде этого?

cout << b1.ships[1].color << endl; 

Поскольку ships является частным членом Board и, следовательно, не доступны из-за пределов самого класса.

1

Вы указали ships как частный переменная всех class Board объектов. Поэтому вы не можете получить доступ к нему со стороны Board.

Что касается operator[], если вы объявили ships вектор, как общественного, было бы прекрасно, чтобы написать:

cout << b1.ships[1].color << endl; 

EDIT: Что касается обсуждения в комментариях, т.е. экранного переменными членов Board и Ship объектов: вы можете либо сделать Board , либо создать общедоступные геттеры для переменных-членов, к которым вы хотите получить доступ, например класс Ship может выглядеть так:

class Ship { 
public: 
    Ship(char symb, PositionChar pos, char ori, unsigned int tam, unsigned int cor); 

private: 

    char symbol; 
    PositionChar position; 

    char orientation; 
    unsigned int size; 
    unsigned int color; 
    string status; 
public: 
    unsigned int getSize() { return size;} 

}; 
+0

И я не могу этого сделать, потому что цвет является частным. Я понимаю, почему я не могу этого сделать, но в этом проекте уже объявлены классы, и я не могу их изменить. Я запутался, потому что теперь мне нужно положить корабли на доску, и я не могу понять, как получить цвет, размер, ориентацию и т. Д. Я просто не могу выполнить эти параметры: \ – Verance

+0

@Verance Не можете ли вы просто добавить публикацию метод доступа к классу 'Board'? – syntagma

+0

Вы хотите положить это вектор Ships public? Я могу и я это сделал, но тогда все атрибуты класса Ship являются частными, и я не могу получить к ним доступ. – Verance

0

1- убедитесь, что cout << b1.ships[1].color << endl; используется в функции, friend к Board class и Ships class включая int main(). для доступа к частным лицам

2- убедитесь, что вы указали Ship до Board, потому что вектор берет копию ваших объектов корабля.

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