Я новичок в 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;
}
Довольно точно, что ваш 'getCountry()' не делает то, что вы хотите (т. Е. Он не имеет ничего общего с 'string country [5]', но всегда создает и возвращает новый выделенный массив). – crashmstr
Он даже не компилируется! 'страна' должна быть' string * ', а не' string'. –
Избегайте использования 'new'. Этот код полон утечек памяти. Вместо этого используйте 'std :: vector' (тогда вам не нужно беспокоиться о проблемах с длительностью). Хотя, думая об этом, вы думаете, что «строка [5]» объявляет строку (до) пятью символами? Это не так. Он объявляет пять пустых строк, каждая из которых может быть неограниченной длины. –