2012-04-24 4 views
0

처음으로 묻습니다.또 다른 ureolved 외부 케이스

여기 거래입니다 :

나는 도우미 클래스가 나는 프로젝트 전반에 걸쳐 사용하는 것이 여러 수학 기능을 가지고 그 (적어도 지금은 클래스이다).

#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 파일을 포함시킵니다. 그리고 다음과 같은 4 가지 함수 중 하나를 사용하십시오 : cUtil :: func_name(). 그것은 cUtil의 모든 기능과 그 기능을 사용하는 모든 클래스에 대한 표시 등

LNK2001: unresolved external symbol "public: static double __cdecl cUtil::utilsRandom 
(double,double)" ([email protected]@@[email protected]) C:\Users\Rockstrongo\Documents\Projects 
\nnEvo\nnEvo\net.obj 

로 때때로 나는 확인되지 않은 외부 오류가 발생합니다.

나는 때때로 그 일을하기 때문에 나타납니다. 나는 프로젝트를 재건 할 것이고 재개발 될 것입니다. 다시 스크럽을하려면 cUtils 코드의 일부분을 변경하거나 다른 클래스에 포함 된 방식이나 다시 실행하게하는 방식을 변경합니다. 얼마 동안, customUtils.cpp 컴파일 -> 컴파일 - 나머지 작업은 더 이상 작동하지 않습니다.

내 것과 같이 훈련받지 않은 눈에게는 이것은 완전히 무작위로 보입니다. 그리고 나는 파악할 짚에서 모두 벗어났습니다. Microsoft Visual Studio 2010을 사용하고 있습니다. OpenGL 및 glut을 사용하는 콘솔 프로젝트입니다.

답변

0

double과 int를 사용하려면 cUtil::utilsRandom을 오버로드했습니다. 그것은 한 가지를 제외하고는 괜찮습니다. 반환 된 유형을 변경할 수 없습니다. 오버로딩 된 두 버전 모두 int 또는 double을 반환해야합니다. 다른 리턴 된 유형을 가져야하는 경우, 함수에 과부하를주지 마십시오. 오히려 다른 함수 이름을 사용하십시오.

+0

나는 내 기능을 utilsRandomInt 및 utilsRandomDouble이라고 각각 변경했습니다. 오버로드 된 함수에 대해 서로 다른 리턴 유형을 설정할 수 없습니다. 또한이 실수로 '릴리스 모드에서 내 프로그램 충돌'문제가 수정 된 것 같습니다. – user1354455

+0

컴파일러 구현 문제는 반환 된 형식에 따라 함수가 다를 수 없다는 것입니다. 초대 할 수는 없지만 C++에서 작동하는 방식입니다. –