Почему в заголовочных файлах Numeric Recipes нет элементов защиты?

начинающий программист C ++ здесь.

Я использую исходный код Numeric Recipes (V3) как часть более крупного модулированного проекта C ++.

Хотя я постараюсь не вдаваться в подробности моей проблемы, мне любопытно, почему эти файлы заголовков NR не содержат никаких средств защиты заголовков? Я знаю, что этот вопрос очень специфичен для тех, кто использовал этот код в прошлом, но, глядя на форумы NR, они кажутся довольно неактивными …

Ошибки, которые я нахожу с моим кодом, который вызвал этот вопрос:

ошибка LNK2005: «void __cdecl gaussj (класс NRmatrix &) «(? gaussj @@ YAXAAV? $ NRmatrix @ N @@@ Z) уже определено в Schmidt_V2_ (Zeta) .obj

ошибка LNK2005: «void __cdecl gaussj (класс NRmatrix &, класс NRmatrix &) «(? gaussj @@ YAXAAV? $ NRmatrix @ N @@ 0 @ Z) уже определено в Schmidt_V2_ (Zeta) .obj

1

Решение

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

Если вам нужно включить эти заголовки из нескольких мест в ваш проект, вы должны ввести своих собственных охранников, например так:

#include <a_normal_thing>
#include <another_normal_thing>

#ifndef SPECIAL_NONESENSE_H
#define SPECIAL_NONESENSE_H
#include <special_nonsense>
#endif

// More normal includes...

Это многословно и раздражает, но это сработает.

РЕДАКТИРОВАТЬ: или в настоящее время, это довольно безопасно использовать #pragma once как предполагает Донни в комментарии ниже. Это не будет работать в версиях GCC старше 3.4, но, вероятно, вам больше не нужно это поддерживать.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]