Ошибка C2955 “использование шаблона класса требует списка аргументов шаблона” с стандартами C++17 при наличии аргумента по умолчанию шаблона.

Вопросы и ответы

У меня есть проект, который компилировался несколько лет назад, но когда я попытался скомпилировать его недавно, я получил ошибку “использование шаблона класса требует списка аргументов шаблона”, строка кода, вызывающая эту ошибку:

wfs_Vec3        m_vCenterSpeed;

Шаблон wfs_Vec3 имеет параметры шаблона по умолчанию, как показано ниже:

template<typename T = float>
struct wfs_Vec3
{
...
};

Мой компилятор – Visual Studio 2019 Community. Я пытался изменить параметры языка C++ на C++17 и C++20, и эта ошибка все еще сохраняется. Странно, что когда я создал новый проект и протестировал эту строку:

wfs_Vec3        m_vCenterSpeed;

Всё в порядке, и компиляция проходит без ошибок. Я не изменял код с тех пор, как он успешно компилировался несколько лет назад, все, что я могу предположить, это то, что я обновил свою Visual Studio, у меня абсолютно нет идей, может кто-то помочь мне?

Ответ

Ошибка C2955 "use of class template requires template argument list" возникает, когда компилятор C++ ожидает явный список аргументов шаблона для использования шаблонного класса, но не получает его. В вашем случае, вы предоставили шаблонный класс wfs_Vec3 с параметром по умолчанию. Однако, если код, в котором вы используете wfs_Vec3, находится в некотором контексте, где компилятор не может корректно установить, что аргументы шаблона необходимы, он вызывает эту ошибку.

Чтобы исправить ошибку, следуйте следующим шагам:

  1. Проверьте область видимости: Убедитесь, что класс wfs_Vec3 доступен в области видимости, где вы его используете. В случае, если он объявлен в заголовочном файле, убедитесь, что файл правильно включён (#include).

  2. Проверьте, не используется ли специальная версия: Убедитесь, что в вашем проекте нет других определений (или определений с другими параметрами шаблона) для wfs_Vec3, которые могут конфликтовать с тем, что вы ожидаете.

  3. Явное указание параметра шаблона: Попробуйте явно указать параметр шаблона, даже если он по умолчанию. Например:

    wfs_Vec3<float> m_vCenterSpeed;

    Это может помочь компилятору правильно интерпретировать ваш код.

  4. Проверка на старые зависимости: Если ваш проект зависел от старых библиотек или других файлов, убедитесь, что они не стали причиной конфликта. Возможно, вам потребуется обновить их или проверить, как они работают с новой версией компилятора.

  5. Проверьте настройки проекта: Изменения в конфигурациях проекта между версиями Visual Studio могут повлиять на компиляцию. Проверьте, что ваш проект использует правильную версию стандарта C++ (C++17 или C++20) и что все настройки соответствуют необходимым стандартам.

  6. Очистите и пересоберите проект: Иногда старые артефакты сборки могут вызывать неожиданные ошибки. Очистите проект и выполните полную пересборку.

  7. Поиск возможных проблем в коде: Проверьте другие части кода на предмет возможных проблем, которые могут повлиять на интерпретацию wfs_Vec3. Например, если есть ненадёжные директивы предобработчика или использование пространств имен, это также может вызвать проблемы компиляции.

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

Оцените материал
Добавить комментарий

Капча загружается...