Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在数字配方头文件中没有包含卫士? 新手C++程序员在这里。 我使用数字配方(V3)源代码作为一个更大的、被调制的C++项目的一部分。_C++_Numerical Methods_Pragma_Include Guards_Numerical Recipes - Fatal编程技术网

为什么在数字配方头文件中没有包含卫士? 新手C++程序员在这里。 我使用数字配方(V3)源代码作为一个更大的、被调制的C++项目的一部分。

为什么在数字配方头文件中没有包含卫士? 新手C++程序员在这里。 我使用数字配方(V3)源代码作为一个更大的、被调制的C++项目的一部分。,c++,numerical-methods,pragma,include-guards,numerical-recipes,C++,Numerical Methods,Pragma,Include Guards,Numerical Recipes,虽然我将尽量不深入我的问题的细节,但我很好奇为什么这些NR头文件没有包含任何头保护?我知道这个问题对于那些在过去使用过这个代码的人来说是非常特殊的,但是看看NR论坛,他们似乎非常不活跃 我在代码中发现的提示此问题的错误有: 错误LNK2005:“无效cdecl gaussj(类NRmatrix&)”(?gaussj@@YAXAAV$NRmatrix@N@@@Z) 已在Schmidt_V2_(Zeta).obj中定义 错误LNK2005:“无效cdecl gaussj(类别NRmatrix&,类别

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

我在代码中发现的提示此问题的错误有:

错误LNK2005:“无效cdecl gaussj(类NRmatrix&)”(?gaussj@@YAXAAV$NRmatrix@N@@@Z) 已在Schmidt_V2_(Zeta).obj中定义


错误LNK2005:“无效cdecl gaussj(类别NRmatrix&,类别NRmatrix&)”(?gaussj@@YAXAAV$NRmatrix@N@@0@Z)已经在Schmidt_V2_(Zeta)中定义了。objAFAIK没有很好的理由。在某些情况下,您可能会合法地不想使用include防护(请参阅),但这不是其中之一

如果需要在项目中包含来自多个位置的标题,则必须引入自己的防护,如下所示:

#include <a_normal_thing>
#include <another_normal_thing>

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

// More normal includes...
#包括
#包括
#如果没有特殊意义
#定义特殊意义
#包括
#恩迪夫
//更正常的包括。。。
这是冗长和烦人的,但它会工作


编辑:或者现在,像唐尼在下面的评论中建议的那样,使用一次
#pragma
是非常安全的。这在早于3.4的GCC版本中不起作用,但您可能不需要再支持它了。

Numberical Recipes代码的质量不是最高的,这是一种轻描淡写的说法。我还认为代码重用有严格的限制,这是因为它们非常顽皮。他们坚持使用单基阵列(由于Fortran端口),这尤其令人恼火。但是代码是经过尝试和测试的,有时是值得使用的。除了在数字部分进行了很好的调试外,*代码中的数字倒数基本上是一个如何不编写代码的示例。在我看来,只有NR中代码的作者才能回答当前所问的问题,除非他们积极参与并插话,我们只能推测他们的动机。这将使这个“基于意见”,这是结束问题的一个常见原因。或者你可以返回并将
#pragma一次
放在标题顶部。不管是不是别人写的,你仍然可以修改你的副本。