gpt4 book ai didi

c++ - 为什么 Numerical Recipes 头文件中没有 include 守卫?

转载 作者:行者123 更新时间:2023-11-30 03:44:25 24 4
gpt4 key购买 nike

这里是新手 C++ 程序员。

我正在使用 Numerical Recipes (V3) 源代码作为更大的调制 C++ 项目的一部分。

虽然我会尽量不深入我的问题的细节,但我很好奇为什么这些 NR 头文件不包含任何头保护?我知道这个问题对于那些过去使用过此代码的人来说非常具体,但看看 NR 论坛,他们似乎很不活跃......

我在代码中发现的提示此问题的错误是;

error LNK2005: "void __cdecl gaussj(class NRmatrix &)"(?gaussj@@YAXAAV?$NRmatrix@N@@@Z) already defined in Schmidt_V2_(Zeta).obj

error LNK2005: "void __cdecl gaussj(class NRmatrix &,class NRmatrix &)"(?gaussj@@YAXAAV?$NRmatrix@N@@0@Z) already defined in Schmidt_V2_(Zeta).obj

最佳答案

据我所知,没有充分的理由。在某些情况下,您可能不希望使用 include guard(参见 this question),但这不是其中之一。

如果您需要在项目的多个地方包含这些 header ,您必须引入自己的守卫,如下所示:

#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 是非常安全的,正如 Donnie 在下面的评论中所建议的那样。这在早于 3.4 的 GCC 版本中不起作用,但您可能不再需要支持它。

关于c++ - 为什么 Numerical Recipes 头文件中没有 include 守卫?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35487057/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com