ページ 11

ヘッダファイルの質問

Posted: 2008年9月01日(月) 22:15
by 西村
以前にさせて頂いたロボカップの質問と二点間の距離を出す質問の延長になるのですが・・・選手のプログラムを作るにあたり、色々な数字(行動に必要なパワーとか)を計算する libsclientex.h というヘッダファイルを作ることになりました。学校で用意されたものに穴埋めをしていくような形なのですが、各関数が間違いなく出来たかどうかを check.c というプログラムでチェック出来るようになっています。しかし、このチェックが一向に通らないのです。どこが間違っているのかが解らないので教えてください。とりあえず、以下に簡略化した libsclientex.c のソースを・・・
/* 2物体の距離を得る

	引数
	pos1( in ): 対象物体の位置
	pos2( in ): 対象物体の位置

	返値:pos1とpos2の距離
*/
double get_distance( Pos pos1, Pos pos2 )
{
  return(sqrt(((pos1.x - pos2.x) * (pos1.x - pos2.x)) + ((pos1.y - pos2.y) * (pos1.y - pos2.y))));

}
以前に試しに作った二点間の距離を出すプログラムではこれで普通に大丈夫だったのに、何故ヘッダファイルになったらダメなのでしょうか?何か特別なことをしなければならないのでしょうか?

多分説明が全く足りていないと思いますが、お願いします。

Re:ヘッダファイルの質問

Posted: 2008年9月01日(月) 22:25
by box
check.c の中身と仕様を提示してください。
チェックが通らない、という状況が、どういうことを指すのかわかるように説明してください。

> 以下に簡略化した libsclientex.c のソースを・・・

libsclientex.h ではないのですか?ヘッダーファイルを作ろうとしているのですよね?
いずれにしても、関数の実体をヘッダーファイルに書くことは推奨できかねます。

ヘッダファイルの質問

Posted: 2008年9月01日(月) 22:43
by 西村
言い方が無茶苦茶・・・というか、完全に自分の中の印象で話してしまっていました。用意された libsclientex.h を元に選手を関数制御する関数ファイルを作っているというのが正しい・・・のだと思います。
とりあえず、 check.c も結構長くなるのでピックアップして・・・
/*
 *	課題1用チェックプログラム
 *
 *	結果が正しくない関数の関数名が出力される
 */
#include "libsclientex.h"
#include <stdio.h>

int main()
{
	PosState my;
	Pos pos, pos2;
	double pow, dir, dist;
	SeenObj obj;

	pos.x = -5.0; pos.y = 0.0;
	pos.x = pos.y = -3.0;

	dist = get_distance( pos, pos2 );  /*距離を計測*/
	if( abs( dist - 9.433981 ) < 0.001 ) ;
	else
		printf( "get_distance\n" );

return 0;
}
間違っていたら get_distance と表示される使用のようです。
別のファイルから関数が数字を受け取る時は最初に書いた libsclientex.c みたいな書き方じゃダメなんですか?
それより、これタイトル変えた方がいいですか?

Re:ヘッダファイルの質問

Posted: 2008年9月01日(月) 22:53
by box
> 	pos.x = -5.0; pos.y = 0.0;
> 	pos.x = pos.y = -3.0;
> 
> 	dist = get_distance( pos, pos2 );  /*距離を計測*/

pos2 に値をセットしていない状態で距離を測っています。
それから、

> 	if( abs( dist - 9.433981 ) < 0.001 ) ;

最後のセミコロンがあるために、コンパイルエラーが出ませんか?
かりにセミコロンを外したとして、else句の方だけに実行文があるのは
何だか不自然な気がします。
不等号の向きを逆にして、条件を満たす場合に"get_distance"と出力する方が、
より自然ではないでしょうか。

まあ、こんなこと言っても、
「表示される使用(仕様)のようです。」と書いてあることから
ご自身が作られたのではないと推測できるため、あまり意味がないようですね。

ヘッダファイルの質問

Posted: 2008年9月01日(月) 23:03
by 西村
言われてみればなかなか怪しいプログラムですね、これ・・・しかし、 check.c とは別に check という実行ファイルも先にもらっているので、こちらでコンパイルを通す必要はないのです。(先に言うべきでした・・)

もう学校からの強制帰宅の時間が来てしまった!