Не структура или союз

Здесь много правильных ответов, но я хотел добавить это (для полноты):

Если вы в нижней части файла cpp реализации выполняете явное инстанцирование всех типов, которые будут использоваться шаблоном с, компоновщик сможет найти их как обычно.

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

template class vector<int>;

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

Вышеприведенный пример бесполезен, поскольку вектор полностью определен в заголовках, за исключением случаев, когда common include file (precompiled header?) использует extern template class vector<int>, чтобы не создавать его из всех других (1000?) файлов, которые используют вектор.

0
задан Branko Andrews 13 July 2018 в 17:28
поделиться

1 ответ

Вы не даете нам минимального примера, который мы могли бы попробовать, и строки, где происходит ошибка, но я предполагаю, что этот

(jobjectArray)env->NewObjectArray(...)

делает что-то другое, чем вы думали. В C операторы постфикса, такие как -> и (...), имеют более высокий лексический приоритет, чем листинг. Вы можете добавить некоторые скобки, чтобы понять, что вы имеете в виду.

1
ответ дан Jens Gustedt 17 August 2018 в 13:29
поделиться
  • 1
    Я обновил его, чтобы дать конкретный пример для тестирования. Я также добавил файл заголовка для справки – Branko Andrews 13 July 2018 в 17:34
Другие вопросы по тегам:

Похожие вопросы: