VisualStudio2010に変換後のエラーについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
クラバック
記事: 26
登録日時: 12年前
住所: 関東

VisualStudio2010に変換後のエラーについて

#1

投稿記事 by クラバック » 12年前

いつもお世話になっております。
VC2010をインストールしVC2008を変換したのですが、コンパイル時にエラーが発生しました。

コード:

#include "../include/GV.h"
#include "../include/func.h" 
#define V0 10.0
//物理的計算を点と距離指定で登録をする(指定時間tで定位置に戻す)

void input_phy_pos(double x,double y,int t){//t=移動にかける時間
	double ymax_x,ymax_y;
	if(t==0)t=1;
	boss.phy.flag=1;//登録オン
	boss.phy.cnt=0;//カウンタ初期化
	boss.phy.set_t=t;//移動にかける時間をセット
	ymax_x=boss.x-x;//移動したい水平距離
	boss.phy.v0x=2*ymax_x/t;//水平成分の初速度
	boss.phy.ax =2*ymax_x/(t*t);//水平成分の加速度
	boss.phy.prex=boss.x;//初期x座標
	ymax_y=boss.y-y;//移動したい鉛直距離
	boss.phy.v0y=2*ymax_y/t;//鉛直成分の初速度
	boss.phy.ay =2*ymax_y/(t*t);//鉛直成分の加速度
	boss.phy.prey=boss.y;//初期y座標
}
これをコンパイルしたとき、以下のエラーが発生しました。

1>------ ビルド開始: プロジェクト: RyuJin, 構成: Debug Win32 ------
1> boss_shot.cpp
1>h:\project\28章\mydat\source\boss_shot.cpp(6): error C2144: 構文エラー : 'void' は ';' によって先行されなければなりません。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
このエラーに従って、voidの前にセミコロンを追加したら、エラーが消えました。
しかし、なぜその位置にセミコロンが必要なのか理解できません。
なぜセミコロンが必要なのかを教えて頂きたいと思いトピックを立てました。
よろしくお願い致します。

アバター
Cir
記事: 32
登録日時: 13年前
住所: 近畿地方

Re: VisualStudio2010に変換後のエラーについて

#2

投稿記事 by Cir » 12年前

GV.hまたはfunc.h内のどこかで、セミコロンを付け忘れているため、このようなビルドエラーがでたのではないでしょうか。
GV.h,func.hを確認してみてください。

アバター
クラバック
記事: 26
登録日時: 12年前
住所: 関東

Re: VisualStudio2010に変換後のエラーについて

#3

投稿記事 by クラバック » 12年前

func.hの中で、void (*boss_shot_bullet[DANMAKU_MAX])()関数の閉じ中括弧の後にセミコロンを付けたらエラーが消えました。

コード:

extern void boss_shot_bulletH000();
extern void boss_shot_bulletH001();
extern void boss_shot_bulletH002();
extern void boss_shot_bulletH003();
extern void boss_shot_bulletH004();
extern void boss_shot_bulletH005();
extern void boss_shot_bulletH006();
extern void boss_shot_bulletH007();

void (*boss_shot_bullet[DANMAKU_MAX])() =
{
	boss_shot_bulletH007,
	boss_shot_bulletH006,
	boss_shot_bulletH005,
	boss_shot_bulletH004,
	boss_shot_bulletH003,
	boss_shot_bulletH002,
	boss_shot_bulletH001,
	boss_shot_bulletH000,
	boss_shot_bulletH000,
	boss_shot_bulletH000,
	boss_shot_bulletH000,
	boss_shot_bulletH000,
	boss_shot_bulletH000,
};
しかし、なぜこの関数は、中括弧の後にセミコロンを付ける必要があるのでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: VisualStudio2010に変換後のエラーについて

#4

投稿記事 by softya(ソフト屋) » 12年前

void (*boss_shot_bullet[DANMAKU_MAX])() =
は関数ポインタ変数の配列です。つまり変数のですので;が必要です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
クラバック
記事: 26
登録日時: 12年前
住所: 関東

Re: VisualStudio2010に変換後のエラーについて

#5

投稿記事 by クラバック » 12年前

済みません。私の関数ポインタについての理解が浅いようです。なんとなくは理解出来るのですが・・・。ひとまず関数ポインタについて勉強してきます・・・。
解決しました。有り難うございました。

閉鎖

“C言語何でも質問掲示板” へ戻る