0

第一次问。

这是交易:

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

#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-> 然后构建其余的工作,但不再工作。

对于像我这样未经训练的眼睛来说,这似乎是完全随机的,我已经竭尽全力抓住。我正在使用 Microsoft Visual Studio 2010。这是一个使用 openGL 和 glut 的控制台项目。

4

1 回答 1

0

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

于 2012-04-24T18:52:28.593 回答