Как отобразить все элементы, хранящиеся в векторе?

class vehicle{
private:
    vector<string>carList;
public:
    void info();
    void displayCarInfo(vector<string>&carList);
}
void vehicle::info(){
    char a;
    string choice;
    do{
        cout<<"Please enter your car Reg number: ";
        cin >> carPlate;
        carList.push_back(carPlate);
        cout << "Do you want to continue add car info(y/n)?";
        cin >> choice;
    }while(choice == "y");
}

void vehicle::displayCarInfo(vector<string>&carList){
    for(int i = 0; i < 100; i++){
        cout << carList[i];
    }
}

//----------------------------------------------------------------
int main(){
    vehicle a;
    a.displayCarInfo(carList);
    return 0;
}

Вопросов:

  1. При отображении списка всех автомобилей отображается сообщение об ошибке. Как его решить?

  2. И как я могу получить информацию для конкретного элемента внутри carList?

-2
источник поделиться
2 ответа
  1. Вам не нужно передавать вектор в качестве аргумента для void displayCarInfo(); :

    class Vehicle{ //<--- define classes starting with uppercase 
    private:
       vector<string>carList;
    public:
        void info();
        void displayCarInfo();
    }; //<----- you need a semicolon here
    
  2. Условием завершения является размер вектора.

    void vehicle::displayCarInfo(){
        for(int i = 0; i < carList.size(); i++){
            cout << carList[i];
        }
    }
    

В main():

  int main(){
      vehicle a;
      a.displayCarInfo();
      return 0;
  }
0
источник

Если я подумаю, что и файлы заголовков были включены, то в программе так много ошибок при сбое компиляции. Вы не проверяли их? Например: выбор и carPlate никогда не были объявлены. Класс не заканчивается символом ';' и т.п.

Вопросы: 1. Вы создаете транспортное средство "a" и никогда не помещаете ничего в переменные-члены. Я предполагаю, что функция info() должна была это сделать, то почему она не была вызвана. Думаю, вам нужно будет сделать это в каком-то цикле.

  1. Вы сделали privateListList частным и попытались передать то же самое, что аргумент от main к функции displayCarInfo(). Надеюсь, вы поймете, что такая вещь не требуется, поскольку она является членом-членом этого же класса, и она может напрямую обращаться к carList. вам просто нужно вызвать публичную функцию с помощью объекта.

  2. Поскольку векторы неограничены (что означает, что их диапазон может расти и сокращаться), не рекомендуется печатать содержимое вектора с использованием контура константы. Таким образом, вы всегда рискуете либо перекрыть цикл, либо запустили его. предпочитают for vector<string>::iterator it = carList.begin(); it!= carList.end(); it++) std::cout << *it << std::endl; for vector<string>::iterator it = carList.begin(); it!= carList.end(); it++) std::cout << *it << std::endl;

Хотя есть более разумные способы сделать то же самое с помощью ostream_iterators и std :: copy, но это может быть выполнено.

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос