2016-02-02 5 views
1

Я новичок в C++, и я пишу код, чтобы увидеть, как работают функции друзей. Вот два класса, и я спрашиваю пользователя в функции друга для параметров, которые, если они равны со значениями переменных-членов, будут отображаться. И я не могу получить доступ к одному из частных членов - массиву с названиями стран. В функции int elcountry(element &e, supply s) Я пытаюсь отобразить количество элементов определенного типа и из определенной страны. Ошибка в том, что член supply::country, (s.country[i]) в функции elCountry недоступен. Я не знаю, как использовать функцию getCountry() для доступа к частному массиву.Как получить доступ к частному члену - массив с функцией друга

class element { 
     friend class supply; 
    private: 
     string name; 
     double value; 
     int serial; 
    public: 
     element(); 
     int elCountry(element &e, supply &s); 
     double* nominals(element &e, supply &s); 
     string getName() { 
      return name; 
     } 
     int getSerial() { 
      return serial; 
     } 
    }; 
    class supply { 
    private: 
     int serial; 
     string country[5]; 
     int n; 
    public: 
     supply(); 
     string* getCountry() { 
      string country = new string[5]; 
       return country; 
     } 
     friend int elCountry(element &e, supply &s); 
     friend double* nominals(element &e, supply &s); 
    }; 
    int elcountry(element &e, supply s){ 
     string names, Country; 
     int n; 
     cout << "enter country = "; cin >> Country; 
     cout << "enter name of the element = "; cin >> names; 
     cout << "enter number of elements = "; cin >> n; 
     for (int i = 0; i < 5; i++) { 
      if (Country == s.country[i] && names == e.getName() && n == e.getSerial()) { 
       cout << "the country is " << count << endl; 
       cout << "the name is" << names << endl; 
       cout << "the number is " << n << endl; 
      } 
     } 
      return n; 
} 
+0

Довольно точно, что ваш 'getCountry()' не делает то, что вы хотите (т. Е. Он не имеет ничего общего с 'string country [5]', но всегда создает и возвращает новый выделенный массив). – crashmstr

+0

Он даже не компилируется! 'страна' должна быть' string * ', а не' string'. –

+0

Избегайте использования 'new'. Этот код полон утечек памяти. Вместо этого используйте 'std :: vector' (тогда вам не нужно беспокоиться о проблемах с длительностью). Хотя, думая об этом, вы думаете, что «строка [5]» объявляет строку (до) пятью символами? Это не так. Он объявляет пять пустых строк, каждая из которых может быть неограниченной длины. –

ответ

2

Подпись двух функций не совпадают, они не имеет значения, это не friend функция вообще.

friend int elCountry(element &e, supply &s); 
      ~       ~ 
int elcountry(element &e, supply s){ 
     ~ 

Обратите внимание, что имена не совпадают.

+1

Также обратите внимание, что имена не совпадают (капитал «C» в одном, немного «c» в другом). –

+1

@MartinBonner Спасибо, добавлено. – songyuanyao

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