Невозможно push_back элемента glm :: mat4 в вектор, объявленный в файле заголовка

У меня есть вектор в заголовочном файле a.h:

// in a.h
class A {
public:
    ...
    std::vector<glm::mat4> transforms;
}

Я пытался push_back() вставить в него объект в моем a.cpp файле:

// in a.cpp
glm::mat4 transform;
transforms.push_back(transform);  // errors here

но я получаю эти ошибки:

ни один экземпляр перегруженной функции «std :: vector‹ _Ty, _Alloc> :: push_back [with _Ty = glm :: mat4, _Alloc = std :: allocator] »не соответствует списку аргументов и объекту (объект имеет квалификаторы типа, предотвращающие совпадение)

и

'std :: vector> :: push_back': 2 перегрузки не имеют законного преобразования для указателя this

Если я попытаюсь объявить вектор непосредственно внутри файла a.cpp, он сработает:

// in a.cpp
std::vector<glm::mat4> foo;
foo.push_back(transform);   // this works

Что здесь происходит? Что я сделал не так, когда объявил вектор в заголовочном файле?


person Chin    schedule 09.03.2016    source источник


Ответы (1)


объект имеет квалификаторы типа, которые предотвращают совпадение

Сосредоточьтесь на этом, так как это кажется проблемой. Это означает, что вы могли что-то сделать с вектором, который был или применили к нему квалификатор константного типа в вашем классе A. Это лучшее, что я могу сказать без дополнительной информации, поскольку очевидно, что проблема не в самом векторе.

Для более четкого и определенного ответа вам, возможно, придется опубликовать точный код, который вы используете.

person Nonanon    schedule 09.03.2016
comment
Я объявил вектор точно так, как показано, и я пока нигде не использую / не ссылаюсь на этот вектор, кроме места, где я получаю ошибку в файле .cpp. - person Chin; 09.03.2016
comment
@Chin Значит, вы уверены, что метод, в котором находится код, не является методом const? - person Nonanon; 09.03.2016
comment
вот в чем проблема! Не знаю, почему я это пропустил, спасибо большое! - person Chin; 09.03.2016