если 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 шт):

Автор решения: Harry

У вас неприятност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>?

→ Ссылка