Вектор - это шаблонный тип, означающий, что каждый фрагмент кода, который ссылается на вектор, должен знать полный тип. Ваша библиотека может не только знать о SomeOtherClass и SomeOtherTemplateType, они должны знать о них, чтобы ссылаться на их вектор.
В этом случае полный тип вашего вектора:
std::vector<SomeOtherClass<SomeOtherTemplateType>,std::allocator<SomeOtherClass<SomeOtherTemplateType> > >
... что, вероятно, объявлено в вашем коде примерно так:
vector<SomeOtherClass<SomeOtherTemplateType> > thatVector;
... с распределителем, разрешающим аргумент шаблона по умолчанию.
Теперь перейдем к вашей проблеме коррупции. Существует не так много информации о природе коррупции, поэтому я собираюсь сделать несколько предположений. Иными словами, вы выделяете вектор в одном модуле и пытаетесь что-то с ним сделать (например, push_back
в нем) в другом модуле, и это происходит, когда вы что-то делаете в другом модуле, когда действительно происходит повреждение. К сожалению, во многих из этих случаев коррупция не обнаруживается и не регистрируется в тот момент, когда происходит коррупция. Это часто обнаруживается намного позже в совершенно не связанном коде.
Если приведенные выше предположения верны, у меня есть 2 предложения относительно возможной причины:
Модули не связаны с одной и той же версией и разновидностью библиотек времени выполнения. Попробуйте убедиться, что каждый модуль ссылается на один и тот же CRT (например, многопоточная DLL-библиотека отладки под Windows) и повторите попытку. В большинстве случаев это проблема.
Вы используете разные компиляторы (или разные версии одного и того же компилятора) для создания разных модулей. В этом случае вектор для одного модуля выглядит как одно, а для другого - как другое. Есть много тем, которые косвенно обсуждают проблему такого рода, см. здесь для одного примера.