2012-04-24 11 views
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人の遺体を削除)、私はそれを使用する場合、のは言わせ、クラスに '生き物' と呼ばI 'creature'のヘッダにcustomUtils.hファイルを含めます。 cUtil :: func_name()のように4つの関数のいずれかを使用します。それは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がオーバーロードされています。 1つのことを除いては問題ありません。返されるタイプは変更できません。両方のオーバーロードされたバージョンは、intまたはdoubleを返す必要があります。返されるタイプが異なる必要がある場合は、関数をオーバーロードしないでください。むしろ異なる関数名を使用してください。

+0

私は自分の関数をutilsRandomIntとutilsRandomDoubleという名前に変更しました。オーバーロードされた関数に異なる戻り値の型を設定できないのはなぜですか?さらに、私はこれが誤って固定された「私のプログラムがリリースモードでクラッシュする」問題だと思います。 – user1354455

+0

コンパイラの実装上の問題です。返される型に応じて関数間で違いはありません。私はそれがinvitableだとは思わないが、これはC++で動作する方法です。 –

関連する問題