Почему я получаю эту ошибку при векторной инициализации? - PullRequest
0 голосов
/ 27 января 2020

У меня проблема с объявлением вектора и инициализацией в конструкторе класса. У меня есть Station.h и Station.cpp файлы класса, и я вспоминаю его в основном:

Station.h

#ifndef STATION_H
#define STATION_H

#include <vector>

class Station
{
    public:
        int num_bin;
        int num_staz;
        vector<int> binari;   //here already gives me error! Vector does not name a type
        Station(int num_staz, int num_bin);
        virtual ~Station();
        Station(const Station& other);
    protected:
    private:
};

Затем я хочу инициализировать вектор в конструкторе . cpp вот так:

Station. cpp

#include "Station.h"

using namespace std;
Station::Station(int num_staz, int num_bin)
{
    this->num_bin = num_bin;
    this->num_staz = num_staz;
    this->binari(num_bin);      //here I want to create a vector of num_bin size
}

и затем назовите его в main следующим образом:

main. cpp

#include <iostream>
#include "Station.h"
using namespace std;

int main()
{
    Station staz1(2,3);
    staz1.binari.push_back(300);   // error! class Station has no member binari
    staz1.binari.push_back(250);
    staz1.binari.push_back(150);

    return 0;
}

Где я ошибаюсь?

Ответы [ 2 ]

3 голосов
/ 27 января 2020

this->binari(num_bin); Это не работает, потому что это не инициализация, поэтому она не работает.

Для этой работы используйте ее в in-class initialization list:

Station::Station(int num_staz, int num_bin) : 
    num_bin(num_bin),
    num_staz(num_staz),
    binari(num_bin)
{

}
2 голосов
/ 27 января 2020
this->binari(num_bin);      //here I want to create a vector of num_bin size

Нужная функция: std::vector::resize().

this->binari.resize(num_bin);

Будет лучше инициализировать объект с соответствующим размером. как:

Station::Station(int num_staz, int num_bin) : num_bin(num_bin),
                                              num_staz(num_staz),
                                              binari(num_bin)
{
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...