ページ 11

テキスト読み込み

Posted: 2012年3月14日(水) 16:25
by txet
DXライブラリのファイル読み込み関数を使って、テキストファイルの文章を
配列に入れるというプログラムを組んでいてエラーがでました

コード:


//main.cpp

main{

  Init(); // 初期化

  Draw();//文字描画

}


Init(){

  //いろいろ初期化

 TextRead( " text1.txt" ); //テキストファイル読み込み

}


//TextRead.cpp

namespace{

    char String[ ][ 256 ]; //文章格納配列

}

TextRead( char *TfileName ){

	int FileHandle;//ファイルハンドル
	int line = 0;     //行番号

	FileHandle = FileRead_open( TfileName );


	while( FileRead_eof( FileHandle ) == 0 ){

		FileRead_gets( String[ line ], 256, FileHandle );

		line++;

	}


	FileRead_close( *TfileName );


}

エラーは以下の通りです

error LNK2001: 外部シンボル ""char (* `anonymous namespace'::String)[256]" (?String@?A0x7b83eac9@@3PAY0BAA@DA)" は未解決です。
error LNK1120: 外部参照 1 が未解決です。


サンプルプログラムを見ながら作りました
自分としてはString[line][256]にテキストでの一行分( テキストファイルでは文の改行まで )格納したら
lineに1足して次の一行を入れるというのをしたいと思いますが
案の定エラーが出ました

エラーの原因も教えて頂きたいのですがそれ以前にこのソースコードは正しいのでしょうか?

Re: テキスト読み込み

Posted: 2012年3月14日(水) 16:39
by beatle
txet さんが書きました:エラーの原因も教えて頂きたいのですがそれ以前にこのソースコードは正しいのでしょうか?
お示しになったソースコードはC++のつもりで書いたものでしょうか?もしそうなら、正しくありません。
  • main関数(関数、といっていいのかどうか・・・)の定義に、()がない。
  • 関数の戻り値の指定が無い。main、Init、TextRead
これらは単に書き間違いですか?
txet さんが書きました:DXライブラリのファイル読み込み関数を使って、テキストファイルの文章を
配列に入れるというプログラムを組んでいてエラーがでました

コード:


//main.cpp

main{

  Init(); // 初期化

  Draw();//文字描画

}


Init(){

  //いろいろ初期化

 TextRead( " text1.txt" ); //テキストファイル読み込み

}


//TextRead.cpp

namespace{

    char String[ ][ 256 ]; //文章格納配列

}

TextRead( char *TfileName ){

	int FileHandle;//ファイルハンドル
	int line = 0;     //行番号

	FileHandle = FileRead_open( TfileName );


	while( FileRead_eof( FileHandle ) == 0 ){

		FileRead_gets( String[ line ], 256, FileHandle );

		line++;

	}


	FileRead_close( *TfileName );


}

エラーは以下の通りです

error LNK2001: 外部シンボル ""char (* `anonymous namespace'::String)[256]" (?String@?A0x7b83eac9@@3PAY0BAA@DA)" は未解決です。
error LNK1120: 外部参照 1 が未解決です。


サンプルプログラムを見ながら作りました
自分としてはString[line][256]にテキストでの一行分( テキストファイルでは文の改行まで )格納したら
lineに1足して次の一行を入れるというのをしたいと思いますが
案の定エラーが出ました

エラーの原因も教えて頂きたいのですがそれ以前にこのソースコードは正しいのでしょうか?
char String[ ][ 256 ];は配列の大きさを省略しているためどのくらいメモリを確保していいかが分からず、変数定義になっていない、というのが原因じゃないかと推測しました。

Re: テキスト読み込み

Posted: 2012年3月14日(水) 16:44
by softya(ソフト屋)
namespaceは、C++の名前空間指定で使うものですが使い道は理解されていますか?
まぁ、無名空間を使っているので間違いというわけでは無いのですが他の部分の知識と考え合わせるとよくこんな技を知っているなと。
参考にしたプログラムは、何処のURLで見たのでしょうか?

あと
char String[ ][ 256 ]; //文章格納配列
コレに付いてっは不定サイズですのでエラーになるはずなのですが。
これが解決したら、
error LNK2001: 外部シンボル ""char (* `anonymous namespace'::String)[256]" (?String@?A0x7b83eac9@@3PAY0BAA@DA)" は未解決です。
error LNK1120: 外部参照 1 が未解決です。
も直るはずです。