Если вы сомневаетесь, предположите, что ошибка означает, что она говорит: фактический код был сгенерирован для vector<T>::size
в каждом из этих объектных файлов. Это, конечно, кажется очень необычным, потому что вы ожидаете, что функция будет расширена встроенным в каждом файле, в котором она использовалась.
Если бы это не было std::vector
, первое, что я бы сказал, это то, что функция, определенная в заголовке, не была помечена как встроенная правильно. Компилятор генерирует код в каждом исходном файле, который включает этот заголовок. Какую версию g ++ вы используете и используете ли вы собственную стандартную библиотечно-векторную реализацию?
Одна вещь, которую нужно проверить - это скомпилировать с оптимизацией (-O2
) и посмотреть, не вызывает ли это встроенные вызовы при создании фактической функции.
Другая возможность состоит в том, что вы включаете две разные версии vector
include и нарушаете одно правило определения. В этот момент я бы не исключил ошибку компоновщика, такую как вы видите.