名前空間について
Posted: 2008年12月28日(日) 00:52
前日に立てたスレッドでは、お世話になりました!
教えてもらった方法でファイル分割はできるようになったんですが、新たな壁にぶちあたりましたorz
ある.cppファイルで宣言したnamespace内の関数をmain内で使用しようと思ったのですがよくわからないエラーがでて困ってます;
こんな感じのことをしてみました。
//********************************************
//test.cpp
//********************************************
#include "Dxlib.h"
namespace test {
void kansu() {
DrawFormatString(0,20,GetColor(255,255,255),"test");
}
}
//********************************************
//main.cpp
//********************************************
#include "DxLib.h"
#include "GV.h"
using namespace test;
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ;//ウィンドウモードに変更する関数
if( DxLib_Init() == -1 ) return -1;//初期化処理する関数
while(!ProcessMessage() && !ClearDrawScreen() && CheckHitKey( KEY_INPUT_ESCAPE ) == 0){
ClearDrawScreen();
kansu();
wait_fanc();
fps();
ScreenFlip();
}
DxLib_End() ;//終了処理をする関数
return 0 ;
}
//********************************************
という感じです。
するとエラーが、
error C2871: 'test' : この名前を指定された名前空間は存在しません。
error C3861: 'kansu': 識別子が見つかりませんでした
とでてしまいました・・・。
また、test.cppをincludeしてみたら良いのかなと思ってmainでincludeしてみると
error LNK2005: "void __cdecl test::kansu(void)" (?kansu@test@@YAXXZ) は既に main.obj で定義されています。
fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。
コンパイルについてよくわかってないんですが、cppは勝手に読み込まれるものなのかなと思って、ファイル名を.h(test.h)にしたものをmainでincludeしてコンパイルしてみたらコンパイルが通りました。
しかしこれで書くのはおかしいんじゃないか・・・と思って色々調べたんですがわかりませんでした;
教えてもらった方法でファイル分割はできるようになったんですが、新たな壁にぶちあたりましたorz
ある.cppファイルで宣言したnamespace内の関数をmain内で使用しようと思ったのですがよくわからないエラーがでて困ってます;
こんな感じのことをしてみました。
//********************************************
//test.cpp
//********************************************
#include "Dxlib.h"
namespace test {
void kansu() {
DrawFormatString(0,20,GetColor(255,255,255),"test");
}
}
//********************************************
//main.cpp
//********************************************
#include "DxLib.h"
#include "GV.h"
using namespace test;
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ;//ウィンドウモードに変更する関数
if( DxLib_Init() == -1 ) return -1;//初期化処理する関数
while(!ProcessMessage() && !ClearDrawScreen() && CheckHitKey( KEY_INPUT_ESCAPE ) == 0){
ClearDrawScreen();
kansu();
wait_fanc();
fps();
ScreenFlip();
}
DxLib_End() ;//終了処理をする関数
return 0 ;
}
//********************************************
という感じです。
するとエラーが、
error C2871: 'test' : この名前を指定された名前空間は存在しません。
error C3861: 'kansu': 識別子が見つかりませんでした
とでてしまいました・・・。
また、test.cppをincludeしてみたら良いのかなと思ってmainでincludeしてみると
error LNK2005: "void __cdecl test::kansu(void)" (?kansu@test@@YAXXZ) は既に main.obj で定義されています。
fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。
コンパイルについてよくわかってないんですが、cppは勝手に読み込まれるものなのかなと思って、ファイル名を.h(test.h)にしたものをmainでincludeしてコンパイルしてみたらコンパイルが通りました。
しかしこれで書くのはおかしいんじゃないか・・・と思って色々調べたんですがわかりませんでした;