0

При компиляции выдает undefined reference, не могу понять причину

class Test
{
    static std::vector<int> vec;
    static std::queue<std::string> que;
public:
    Test();
};

Test::Test()
{
    for(int i =0; i<50; ++i)
    {
        vec.push_back(i);
        que.push(std::to_string(i));
    }

    std::cout<< vec.size() << " " << que.size()<<"\n";
}

Qt 5.13

Компилятор mingw 7.3.0 32

Решение:

Как подсказали ниже нужно инициализировать статические объекты.

Вот так:

vector<int> Test::vec ;
queue<std::string> Test::que;

По хорошему инициализация объектов должна быть вне класса, но перед реализацией конструктора.

1 Answers1

3

У вас два статика -

static std::vector<int> vec;
static std::queue<std::string> que;

объявлены, но не определены...

Harry
  • 221,325
  • Можно по подробнее, пожалуйста – Roman Khudoberdin May 29 '20 at 09:56
  • 1
    См. "Отсутствует определение статической переменной класса." по ссылке на дубликат https://ru.stackoverflow.com/questions/536546/%d0%a1%d1%81%d1%8b%d0%bb%d0%ba%d0%b0-%d0%bd%d0%b0-%d0%bd%d0%b5%d1%80%d0%b0%d0%b7%d1%80%d0%b5%d1%88%d0%b5%d0%bd%d0%bd%d1%8b%d0%b9-%d0%b2%d0%bd%d0%b5%d1%88%d0%bd%d0%b8%d0%b9-%d1%81%d0%b8%d0%bc%d0%b2%d0%be%d0%bb-%d0%b2%d0%be%d0%b7%d0%bc%d0%be%d0%b6%d0%bd%d1%8b%d0%b5-%d0%bf%d1%80%d0%b8%d1%87%d0%b8%d0%bd%d1%8b – Harry May 29 '20 at 10:29