Unresolved external 还有一个外部案例

Unresolved external 还有一个外部案例,unresolved-external,Unresolved External,第一次问 交易如下: 我有一个helper类(至少现在是一个类),它有几个数学函数,我在整个项目中都使用这些函数 #ifndef CUSTOM_UTILS_H #define CUSTOM_UTILS_H //--------------------------------------------------------- #include <stdlib.h> #define _USE_MATH_DEFINES #include <math.h> class cUti

第一次问

交易如下:

我有一个helper类(至少现在是一个类),它有几个数学函数,我在整个项目中都使用这些函数

#ifndef CUSTOM_UTILS_H
#define CUSTOM_UTILS_H
//---------------------------------------------------------
#include <stdlib.h>
#define _USE_MATH_DEFINES
#include <math.h>

class cUtil {
public:
static int utilsRandom(int from, int to);
static double utilsRandom(double from, double to);
static double giveAngle(double x, double y);
static double FoV(double cx, double cy, 
    double fx, double fy, 
    double tx, double ty, 
    double radius);
};
//---------------------------------------------------------
#endif 
(移除3个主体,以节省立柱空间)

现在,当我使用它的时候,比方说,在一个名为“生物”的类中,我将customUtils.h文件包含在“生物”的头中。并使用以下4个函数中的任意一个:cUtil::func_name()。 有时我会遇到无法解决的外部错误,例如

LNK2001: unresolved external symbol "public: static double __cdecl cUtil::utilsRandom
(double,double)" (?utilsRandom@cUtil@@SANNN@Z)  C:\Users\Rockstrongo\Documents\Projects
\nnEvo\nnEvo\net.obj
它适用于cUtil中的所有函数以及使用这些函数的所有类

我说它有时会出现,因为它就是这样——我会重建这个项目,它会重新出现。为了再次擦洗它,我会更改cUtils代码的某些部分,或者它包含在其他类中的方式,或者任何使它再次运行的东西。在一段时间内,清理->编译customUtils.cpp->然后构建其余的部分是有效的,但不再有效


对于像我这样一个未经训练的人来说,这似乎完全是随机的,我完全没有把握。我正在使用Microsoft Visual Studio 2010。这是一个使用openGL和glut的控制台项目。

我看到您重载了
cUtil::utilsRandom
以使用double和int。除了一件事之外,这没关系:您不能更改返回的类型。两个重载版本都必须返回int或double。如果必须有不同的返回类型,则不要重载函数。而是使用不同的函数名。

我将我的函数分别改为utilsRandomInt和utilsrandouble。为什么不能为重载函数设置不同的返回类型?此外,我认为这无意中修复了“我的程序在发布模式下崩溃”的问题。这是一个编译器实现问题,根据返回的类型,函数之间不能有区别。我认为它是不可替代的,但这是它在C++中的工作方式。
LNK2001: unresolved external symbol "public: static double __cdecl cUtil::utilsRandom
(double,double)" (?utilsRandom@cUtil@@SANNN@Z)  C:\Users\Rockstrongo\Documents\Projects
\nnEvo\nnEvo\net.obj