SetRegistryKeyに関する質問

[戻る]
merlo 2002/05/12(日) 03:20:44
たびたびの質問ですみません

レジストリ管理の目的で,
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

merlo 2002/05/12(日) 03:23:52
追記

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;
}

//□□□□□□□□□□□□□□□□ここまで

merlo 2002/05/12(日) 05:14:27
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 2002/05/12(日) 05:34:34
ヘッダファイルの二重インクルードはチェックしましたが
ありませんでした

ホント,なきそうです.

merlo 2002/05/12(日) 06:08:45
はぁ 二時間四十分かけて
ようやく直りました

原因は,ヘッダファイルに別の自作ヘッダファイルを
インクルードしていることでした.

どうやら,二重インクルードしてたみたいです.

はぁ 僕の二時間四十分・・・

誰か,一言でいいから,こんな僕に人生のアドバイスを.

TAD [E-Mail] 2002/05/12(日) 07:58:28
プログラミングをしていると、ちょっとしたミスに気付かず、バグフィックスに時間を費やすこ
とがあります。
merlo さんは、二時間四十分悩んだそうですが、数時間で解決できたのですから、良いほうで
しょう。私なんか、過去には、2,3日悩み続けたこともあります。
すぐにミスに気付かなかったことよりも、自分一人でで解決できたことを誉めていいと思います
よ。

2002/05/12(日) 13:58:28
二重インクルード防止のお供に

#ifndef (テキトーな識別子)
#define (テキトーな識別子)



#endif

merlo 2002/05/12(日) 17:08:40
(T_T)

TADさん,あさん.

ありがとうございます.
さっきまで仮眠を取っていたので,
返事遅くなりました

がんばります

がんばっていこー
やぁーれるぅだけぇ〜
がんばっていこぅぅ〜 (BY PAMS)

merlo 2002/05/12(日) 17:09:11
[[解決]]
o(^-^)o

古いスレッドには追加発言できません。