たびたびの質問ですみません
レジストリ管理の目的で,
BOOL C***App::InitInstance()
{
.......
...
#else
Enable3dCon....
#endif
SetRegistryKey((任意の文字列));///この部分
....
}
”この部分”を追加することは,知っているのですが,
このファイル(**(プロジェクト名).cpp)を
スペースでも,何でも少しでも修正すると
以下のようなエラーメッセージが発生してしまい,
もうどうすることもできません.
CGDlg.obj : error LNK2005: double * * __cdecl matrix_new(int,int) (?
matrix_new@@YAPAPANHH@Z) はすでに CG.obj で定義されています
↑このメッセージが9つ出ました.
どうでもいいところに,スペースを一個追加しただけで,
エラーが0個から9個になるなんて・・・
どなたか,これに関して,「これは・・・だからだ」
といえそうな方,どうぞよろしくお願いします
w2k VC++6.0 MFC DlgBase
追記
C**Dlg.cpp内のトップでインクルードしている自作ヘッダファイルには
以下の内容が記述されています.
//□□□□□□□□□□□□□□□□ここから
/************************************************************
/ << 行列 および ベクトルを動的生成する関数群 >>
/
/ double型行列
/ DMatrix a;
//行列の宣言
/ a=matrix_new((int) row,(int) col); //行列の生成
/ matrix_del(a);
//行列の解放
/
/ double型行
/ DVector a;
//宣言
/ a=vect_new((int) size);
//生成
/ vect_new(a);
//解放
/
/
/ int型行列
/ IMatrix a;
//宣言
/ a=intmatrix_new((int) row,(int) col); //生成
/ intmatrix_del(a);
//解放
/
/ int型行
/ IVector a;
//宣言
/ a=intvect_new((int) size); //生成
/ intvect_del(a);
//解放
/
/
/
/
/
/
**************************************************************/
typedef double **DMatrix;
typedef double *DVector;
typedef int **IMatrix;
typedef int *IVector;
//行列の動的生成
DMatrix matrix_new(int row, int col){
int i;
DMatrix a=new double *[row+1];
forto(i,0,row)
a[i]=new double [col];
a[row]=0;
return a;
}
//行列の解放
void matrix_del(DMatrix a){
DMatrix b=a;
while(*b!=0)
delete [] *b++;
delete [] a;
}
//行列の動的生成
IMatrix intmatrix_new(int row, int col){
int i;
IMatrix a=new int *[row+1];
forto(i,0,row)
a[i]=new int [col];
a[row]=0;
return a;
}
//行列の解放
void intmatrix_del(IMatrix a){
IMatrix b=a;
while(*b!=0)
delete [] *b++;
delete [] a;
}
// ベクトルの動的作成
IVector intvect_new(int size)
{
IVector x = new int[size];
return x;
}
// ベクトルの解放
void intvect_del( IVector x)
{
delete [] x;
}
// ベクトルの動的作成
DVector vect_new(int size)
{
DVector x = new double[size];
return x;
}
// ベクトルの解放
void vect_del( DVector x)
{
delete [] x;
}
//□□□□□□□□□□□□□□□□ここまで
10.VCでのnew,deleteのリンクエラー
nafxcwd.lib(afxmem.obj) : error LNK2005: void * __cdecl operator new
(unsignedint) (??2@YAPAXI@Z) already defined in LIBCMTD.lib(new.obj)
が出たら
プロジェクト→設定→LINKタブのObject/Library modulesに nafxcwd.lib Libcmtd.lib を
入れてみる(要はリンクの順番を変えてみる)
という記事を見つけたのですが,リンクの順番を入れ替えろといわれても,
入れ替えるものがありません.
LINK2005に関して,いろいろ調べたのですが,僕の場合は
Hist.obj : error LNK2005: void __cdecl vect_del(double *) (?
vect_del@@YAXPAN@Z) はすでに CG.obj で定義されています
という風に,オブジェクトの名前が最初に出てきます.
libとかobjとかっていうファイルを今まで一度も考えたことも
いじったことも利用したこともないので・・・これが原因でないと思うのですが
早とちりでしょうか.
僕としては,やはりNEW DELETE演算子が悪さをしているような
気がします
ヘッダファイルの二重インクルードはチェックしましたが
ありませんでした
ホント,なきそうです.
はぁ 二時間四十分かけて
ようやく直りました
原因は,ヘッダファイルに別の自作ヘッダファイルを
インクルードしていることでした.
どうやら,二重インクルードしてたみたいです.
はぁ 僕の二時間四十分・・・
誰か,一言でいいから,こんな僕に人生のアドバイスを.
プログラミングをしていると、ちょっとしたミスに気付かず、バグフィックスに時間を費やすこ
とがあります。
merlo さんは、二時間四十分悩んだそうですが、数時間で解決できたのですから、良いほうで
しょう。私なんか、過去には、2,3日悩み続けたこともあります。
すぐにミスに気付かなかったことよりも、自分一人でで解決できたことを誉めていいと思います
よ。
二重インクルード防止のお供に
#ifndef (テキトーな識別子)
#define (テキトーな識別子)
#endif
(T_T)
TADさん,あさん.
ありがとうございます.
さっきまで仮眠を取っていたので,
返事遅くなりました
がんばります
がんばっていこー
やぁーれるぅだけぇ~
がんばっていこぅぅ~ (BY PAMS)
o(^-^)o