если qaxaq == a, мне надо печатать b, что ни так
#include<iostream>
#include<string>
class Train {
private:
std::string M;
std::string gnacqihamar;
public:
Train ( std::string a, std::string b ) : M(a), gnacqihamar(b) {
}
/*std::string getM(){
return M;
}
std::string getgnacqihamar(){
return getgnacqihamar;
}*/
~Train(){}
};
int main(){
int n;
std::cin >> n;
std::string qaxaq;
std::cin >> n;
Train** arr = new Train*[n];
for(int i = 0; i < n; i ++){
std::string a , b;
std::cin >> a >> b;
arr[i] = new Train(a , b) ;
}
std::cin >> qaxaq;
for(int i = 0; i < n; i ++){
if(arr[i][0] == qaxaq){
std::cout << arr[i][1];
}
}
else{
std::cout << "Unreachable city";
}
Ответы (1 шт):
У вас неприятностm тут:
arr[i][0] == qaxaq
Начну с несущественной (почти) мелочи arr[i] у вас указатель на Train, но не на массив Train'ов, так что arr[i][0] - не совсем то, что представляешь, глядя на эту запись. А вот это - arr[i][1] - уже совсем неверно и приведет к проблемам.
А главное - вы не можете сравнивать Train и string - как именно это делать? С какой из строк сравнивать? (Это не риторический вопрос - по вашему коду непонятно.)
Правильнее было бы раскомментировать функции в классе и использовать их, что-то вроде
class Train
{
private:
std::string M;
std::string gnacqihamar;
public:
Train ( std::string a, std::string b ) : M(a), gnacqihamar(b) {}
std::string getM() { return M; }
std::string getgnacqihamar() { return gnacqihamar; }
~Train(){}
};
int main()
{
int n;
std::cin >> n;
std::string qaxaq;
std::cin >> n;
Train** arr = new Train*[n];
for(int i = 0; i < n; i ++){
std::string a , b;
std::cin >> a >> b;
arr[i] = new Train(a , b) ;
}
std::cin >> qaxaq;
for(int i = 0; i < n; i ++){
if(arr[i]->getM() == qaxaq){
std::cout << arr[i]->getM();
}
else{
std::cout << "Unreachable city";
}
}
}
Простите уж, не знаю, какую именно строку вы хотите сравнивать и какую выводить...
И еще - раз уж у вас C++ - то зачем вам динамический массив указателей? Почему бы не использовать vector<Train>?