另一个未解决的外部案例

时间:2012-04-24 18:32:04

标签: unresolved-external

第一次询问。

这是交易:

我有一个帮助类(至少现在它是一个类),它有几个数学函数,我在整个项目中使用。

#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 

实现:

#define _USE_MATH_DEFINES
#include "customUtils.h"
//---------------------------------------------------------
int cUtil::utilsRandom(int from, int to) {
if (from == to) {
    return from;
}
return (rand() % (to - from)) + from;
}
//---------------------------------------------------------
double cUtil::utilsRandom(double from, double to) {
  ...
}
//---------------------------------------------------------
double cUtil::giveAngle(double x, double y) {
  ...
}
//---------------------------------------------------------
double cUtil::FoV(double cx, double cy, 
double fx, double fy, 
double tx, double ty, 
double radius) {
  ...
}
//---------------------------------------------------------

(删除了3个实体以节省帖子的空间)

现在,当我使用它时,让我们说,在一个名为'creature'的类中,我将customUtils.h文件包含在'creature'的标题中。并使用以下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-&gt;然后构建其余的工作,但不再是。

对于像我这样的未经训练的眼睛,这似乎是完全随机的,我全都没有吸管了。我正在使用Microsoft Visual Studio 2010.这是一个使用openGL和过剩的控制台项目。

1 个答案:

答案 0 :(得分:0)

我看到你超载cUtil::utilsRandom以使用双打和整数。除了一件事之外没关系:你不能改变返回的类型。重载版本都必须返回int或double。如果必须具有不同的返回类型,则不要重载该函数。而是使用不同的函数名称。