В моем классе у меня есть два векторных объекта:
std::vector<std::string> vecteur_noms_A_;
std::vector<std::string> vecteur_noms_B_;
У меня также есть следующая функция:
std::vector<std::string> & get_vecteur_noms_A_() {
return vecteur_noms_A_;
}
но у меня не то же самое для B
один!
Когда я создаю экземпляр своего класса и выполняю следующие инструкции в своем конструкторе классов; Я могу видеть (через отладку или когда он выдает ошибку), что:
vecteur_noms_A_.push_back("some value"); // is ok
vecteur_noms_B_.push_back("some other value"); // is not ok <- throws an error.
Отладка позволяет мне видеть, что объект (или экземпляр?) (Пустой вектор) существует для vecteur_noms_A_
, но не для vecteur_noms_B_
.
Непонятно, почему я наблюдаю тот компромисс, которого я не ожидал, я был бы счастлив, если бы получил объяснение.
Вызывает ли тот факт, что я определяю функцию, компилятор для создания экземпляра объекта?
Вот пример:
#include <iostream>
#include <vector>
using namespace std;
class GP
{
public:
//Constructeur
GP(std::vector<std::string> list_names_A, std::vector<std::string> list_names_B
);
//Fonctions
void construction_vecteur_A_B_(std::vector<std::string> list_names_A, std::vector<std::string> list_names_B);
std::vector<std::string>& get_vecteur_noms_A() {
return vecteur_noms_A_;
}
std::vector<std::string> vecteur_noms_A_;
std::vector<std::string> vecteur_noms_B_;
};
GP::GP(std::vector<std::string> list_names_a, std::vector<std::string> list_names_b) {
construction_vecteur_A_B_(list_names_a, list_names_b);
}
void GP::construction_vecteur_A_B_(std::vector<std::string> list_names_a, std::vector<std::string> list_names_b)
{
for (int i = 0; i < list_names_a.size(); i++) {
vecteur_noms_A_.push_back(list_names_a[i]);
}
for (int i = 0; i < list_names_b.size(); i++) {
vecteur_noms_B_.push_back(list_names_b[i]);
}
}
int main()
{
std::vector<std::string> list_names_A = std::vector<std::string>();
std::vector<std::string> list_names_B = std::vector<std::string>();
list_names_A.push_back("A");
list_names_B.push_back("B");
GP(list_names_A, list_names_B);
return 0;
}
Поскольку программа, написанная здесь, не выдает ошибку, я хотел бы понять, почему:
vecteur_noms_A_
и
vecteur_noms_B_
существуют при исполнении, так что я могу сделать откат.
Почему нет необходимости применять это к ним в конструкторе:
vecteur_noms_A_ = std::vector<std::string>();
vecteur_noms_B_ = std::vector<std::string>();
Спасибо за вашу помощь.