функция не найдена при создании экземпляра шаблонной функции в VS2017 - PullRequest
0 голосов
/ 17 сентября 2018

Это может быть глупый вопрос, но я совершенно не имею представления о приглашении.

Код находится в файле .cpp

template <typename T> void foo2(T){}
template void foo2<int>(int);

VS2017 постоянно говорит мне, что: Определение функции для функции 'foo2' не найдено. Тем не менее, код на самом деле работает в VS2017, никаких сообщений об ошибках, если я его запускаю. Я не знаю, является ли это проблемой, связанной с IDE, или это проблема кода. Как это довольно раздражает, кто-нибудь знает, почему появляется подсказка и как ее исправить? Спасибо!

========= Update ===========

Вот полный код (переместите экземпляр в файл .h, но проблема остается той же):

test.h

#pragma once
template <typename T> void foo2(T);
template void foo2<int>(int);

test.cpp

#include "test.h"
#include "stdafx.h"
template <typename T>void foo2(T){}

основной файл

#include "stdafx.h"
#include "test.h"

int main()
{
    int a = 1;
    foo2(a);
}

Я склонен полагать, что это специфичный для IDE вопрос. Если я попрошу VS показать потенциальное исправление, он создаст следующий код в файле .cpp:

template void foo2(int)
{
    return template void();
}

что определенно не так. Даже не может пройти компиляцию.

1 Ответ

0 голосов
/ 18 сентября 2018

С расширенным кодом я понял идею.

Вы действительно хотите extern template void foo2<int>(int); в файле .h.В test.cpp должен быть только один экземпляр.extern template является новинкой в ​​C ++ 11, поэтому, хотя ваша книга еще не освещает ее, она, безусловно, понята для VS2017.

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