Как мне создать вектор, который содержит объекты? - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь создать вектор, который может содержать несколько уже существующих объектов, но у меня проблемы с этим. В visual studio он говорит: «В этом объявлении нет класса хранения или спецификатора типа».

Вот код:

#include <iostream>
#include <vector>
#include <string>

struct test {
    int id;

    test(int i) {
        id = i;
    }
};

test obj1(1);
test obj2(2);
test obj3(3);

std::vector<test> egg;

egg.push_back(obj1);
egg.push_back(obj2);
egg.push_back(obj3);

int main() {}

Ответы [ 3 ]

3 голосов
/ 10 февраля 2020

Я думаю, что проблема с этой программой в том, что весь ваш код находится за пределами метода main, и поэтому компилятор не знает, что с ним делать.

2 голосов
/ 10 февраля 2020

Вы не можете писать операторы выражений , такие как egg.push_back(obj1); в область файла / пространства имен , в отличие от объявлений / определений , таких как test obj1(1);. Операторы выражения могут использоваться только в области видимости блока , то есть внутри тела функции. Например,

int main() {
    egg.push_back(obj1);
    egg.push_back(obj2);
    egg.push_back(obj3);
}

Также избегайте использования глобальных переменных и поместите все объявления / определения переменных в локальную область видимости:

int main() {
    test obj1(1);
    test obj2(2);
    test obj3(3);

    std::vector<test> egg;

    egg.push_back(obj1);
    egg.push_back(obj2);
    egg.push_back(obj3);
}

Также, вне зависимости от вопроса, используйте список инициализатора конструктора для инициализации членов, а не присвоение членам в теле конструктора:

test(int i) : id(i) {
}
0 голосов
/ 10 февраля 2020

Как сказал Зак, за пределами вашего основного метода есть код. std::vector<test> egg; допускается за пределами int main, но такая функция, как egg.push_back(obj1);, не является

пересмотренным кодом:

#include <iostream>
#include <vector>
#include <string>

struct test {
    int id;

    test(int i) {
        id = i;
    }
};

test obj1(1);
test obj2(2);
test obj3(3);

std::vector<test> egg;

int main() {
    egg.push_back(obj1); //moved to main
    egg.push_back(obj2); //moved to main
    egg.push_back(obj3); //moved to main
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...