2015-01-28 2 views
0

Я получаю эти ошибки с блоками кода IDE (с компилятором g ++) «является приватным» для каждой переменной-члена. Насколько я знаю, законно использовать только частные переменные в других членах, что я и делаю. Это код моего CPP:Кодовые блоки и ошибка g ++ «являются частными»

/* 
bullsAndCows.cpp 
*/ 

using namespace std; 

//enum class state {_bull, _cow, _none}; 

class bullsAndCows { 
private: 
    const int m_size{4}; 
    bool m_guessed{false}; 
    std::vector<char> m_digit; 
    std::vector<state> m_digitState; 

public: 
    bullsAndCows() { 
     m_guessed = false; 
     for(int i = 0; i < m_size; i++) 
      m_digitState[i] = state._none; 
    } 

    void bullsAndCows::setGuessed(bool value) { _guessed = value; } 
    bool bullsAndCows::getGuessed() { return _guessed; } 
    void bullsAndCows::setDigit(char value, int i) { m_digit[i] = value; } 
    char bullsAndCows::getDigit(int i) { return m_digit[i]; } 
    void bullsAndCows::setDigitState(state value, int i) { m_digitState[i] = value; } 
    state bullsAndCows::getDigitState(int i) { return m_digitState[i]; } 
}; 

этот код мой основной, где я тестирование:

#include "bullsAndCows.h" 

using namespace std; 

int main() 
{ 
    bullsAndCows game; 
    for(int i = 0; i < game.m_size; i++) { 
     cin >> game.m_digit[i]; 
     cout << game.m_digit[i]; 
    } 

    return 0; 
} 

C++ 11 флаг активируется на компилятор.

+1

Ваша основная функция() пытается подключить game.m_digit к cout, а также прочитать ее из cin. Main не может видеть m_digit, потому что он является конфиденциальным. Попробуйте прочитать во временную переменную, а затем вызовите setDigit() и getDigit() в соответствии с интерфейсом вашего класса. – qeadz

ответ

4

Компилятор верен.
Оператор:

cin >> game.m_digit[i]; 

получает доступ к закрытому члену:

class bullsAndCows { 
private: 
    const int m_size{4}; 
    bool m_guessed{false}; 
    std::vector<char> m_digit; 
    std::vector<state> m_digitState; 

Частные члены могут быть доступны только с помощью методов внутри класса, а не внешними объектами, как функции main.

Ваш выбор:

  • Создать методы получения и установки.
  • Оператор извлечения потока перегрузки >> для класса bullsAndCows
  • Сделать переменные общедоступными.
+0

Уже есть некоторые методы геттера, их просто не называют :) –

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