ページ 11

10章でビルドエラーです。

Posted: 2013年9月25日(水) 11:24
by うさぎ太郎
初めまして
vc++2008で御龍神プログラムをそのままコピペしています。
9章までは順調だったのですが、10章で3つエラーが出ました。自力で2つは消したのですが、残り一つがわかりません。
load.cppの
int LoadDivGraph( "../dat/img/enemy/0.png" , 9 , 3 , 3 , 32 , 32 , img_enemy[0][0] ) ;
で、
1>c:\users\usagi\documents\visual studio 2008\projects\project\1章\mydat\source\load.cpp(13) : error C2078: 初期化子の数が多すぎます。
と表示されてしまいます。
ご指導お願いします。

Re: 10章でビルドエラーです。

Posted: 2013年9月25日(水) 11:56
by Tatu
10章のページに書かれている通りに

コード:

LoadDivGraph( "../dat/img/enemy/0.png" , 9 , 3 , 3 , 32 , 32 , img_enemy[0] ) ;
と書けばよいのではないでしょうか。

関数を呼び出す時には型名(ここではintのこと)は不要です。
型名を付けた場合、「error C2078: 初期化子の数が多すぎます。」というエラーが出ます。

また、img_enemy[0]がimg_enemy[0][0]になっている場合
error C2664: 'LoadDivGraph' : 7 番目の引数を 'int' から 'int *' に変換できません。(新しい機能 ; ヘルプを参照)
1> 整数型からポインター型への変換には reinterpret_cast、C スタイル キャストまたは関数スタイル キャストが必要です。
というエラーが出ます。

Re: 10章でビルドエラーです。

Posted: 2013年9月25日(水) 13:15
by softya(ソフト屋)
はじめまして。
コピペだけだと理解できていない(C言語の文法 ならびに シューティングの組み方)と思いますので、一行一行を理解しながら打ち込むことをお勧めします。
章の最後まで行ったけど弾幕の種類を増やすことが出来ないといった質問も多いので理解することは大事です。

【補足】シューティングを作れるように成るための講座なので、作れるように成らなかれば本末転倒と言って良いと思います。ただ、一行一行を理解しようとすると分からないことは沢山出ると思いますので、それを質問して貰えれば回答致します。

Re: 10章でビルドエラーです。

Posted: 2013年9月25日(水) 20:35
by うさぎ太郎2
早速のレスありがとうございます。
まず、Tatuさんのレスに対してですが、ご指摘の方法を(つまり龍神の10章をそのままコピペしたところ、以下の3つのエラーが出ました。

========================================================================================================================
1>------ すべてのリビルド開始: プロジェクト: RyuJin, 構成: Debug Win32 ------
1>プロジェクト 'RyuJin'、構成 'Debug|Win32' の中間出力ファイルを削除しています。
1>コンパイルしています...
1>cl : コマンド ライン warning D9035 : オプション 'Wp64' の使用は現在推奨されていません。今後のバージョンからは削除されます。
1>char.cpp
1>fps.cpp
1>ini.cpp
1>key.cpp
1>load.cpp
1>c:\users\usagi\documents\visual studio 2008\projects\project\1章\mydat\source\load.cpp(13) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>c:\users\usagi\documents\visual studio 2008\projects\project\1章\mydat\source\load.cpp(13) : error C2078: 初期化子の数が多すぎます。
1>c:\users\usagi\documents\visual studio 2008\projects\project\1章\mydat\source\load.cpp(13) : error C2440: '初期化中' : 'int [9]' から 'int' に変換できません。
1> この変換が可能なコンテキストはありません。
1>main.cpp
1>music.cpp
1>out.cpp
1>enemy.cpp
1>enemy_act_pattern.cpp
1>graph.cpp
1>c:\users\usagi\documents\visual studio 2008\projects\project\1章\mydat\source\graph.cpp(7) : warning C4244: '引数' : 'double' から 'float' への変換です。データが失われる可能性があります。
1>c:\users\usagi\documents\visual studio 2008\projects\project\1章\mydat\source\graph.cpp(7) : warning C4244: '引数' : 'double' から 'float' への変換です。データが失われる可能性があります。
1>c:\users\usagi\documents\visual studio 2008\projects\project\1章\mydat\source\graph.cpp(13) : warning C4244: '引数' : 'double' から 'float' への変換です。データが失われる可能性があります。
1>c:\users\usagi\documents\visual studio 2008\projects\project\1章\mydat\source\graph.cpp(13) : warning C4244: '引数' : 'double' から 'float' への変換です。データが失われる可能性があります。
1>graph_back.cpp
1>cshot.cpp
1>shot.cpp
1>shotH.cpp
1>boss_shot.cpp
1>boss_shotH.cpp
1>コードを生成中...
1>ビルドログは "file://c:\Users\usagi\Documents\Visual Studio 2008\Projects\project\1章\Debug\BuildLog.htm" に保存されました。
1>RyuJin - エラー 3、警告 5
========== すべてリビルド: 0 正常終了、1 失敗、0 スキップ ==========

コード(load.cpp)は以下の通りです。
code
#include "../include/GV.h"

//ボード・プレイヤーイメージロード
void load(){
img_board[10] = LoadGraph("../dat/img/board/10.png");
img_board[11] = LoadGraph("../dat/img/board/11.png");
img_board[12] = LoadGraph("../dat/img/board/12.png");
img_board[20] = LoadGraph("../dat/img/board/20.png");
LoadDivGraph( "../dat/img/char/0.png" , 12 , 4 , 3 , 73 , 73 , img_ch[0] ) ;
}

//敵イメージロード
LoadDivGraph( "../dat/img/enemy/0.png" , 9 , 3 , 3 , 32 , 32 , img_enemy[0] ) ;

/code

そこで、
code
int LoadDivGraph( "../dat/img/enemy/0.png" , 9 , 3 , 3 , 32 , 32 , img_enemy[0][0] ) ;
/code
としたところ、
1>c:\users\usagi\documents\visual studio 2008\projects\project\1章\mydat\source\load.cpp(13) : error C2078: 初期化子の数が多すぎます。
と表示されてしまいました。
どう解決していけばいいでしょうか?
ちなみに環境は、
Windows7で、visual studio 2008で開発しています。
よろしくお願いします。
次にsoftya(ソフト屋)さんのレスに対してですが、
ご指摘の通り、コピペ(理解しながらではあるが)だけでは結局理解が進まないと思います。
今後は時間がかかっても1行1行理解しながらやっていきますのでよろしくお願いします。
ありがとうございました。

Re: 10章でビルドエラーです。

Posted: 2013年9月25日(水) 20:54
by Tatu
10章のページ(http://dixq.net/rp/10.html)に
--load.cppに以下を追加--

LoadDivGraph( "../dat/img/enemy/0.png" , 9 , 3 , 3 , 32 , 32 , img_enemy[0] ) ;
と書かれていたのでload.cppの一番下にその行を追加したという事ですね。
そうした場合は確かにうさぎ太郎さんが書いた3つのエラーが出ますね。

その行をload()の中に書けばエラーが出なくなるはずです。

Re: 10章でビルドエラーです。

Posted: 2013年9月25日(水) 20:59
by softya(ソフト屋)
codeタグの使い方に問題が有ります。[]で囲んでくださいね。
【補足】うさぎ太郎さん。名前を変えることはルール違反ですので、今後は「うさぎ太郎」で統一していただくようにお願いします。

まず問題は、LoadDivGraph()関数の呼び出しが関数外に書かれているように見えます。
これは関数の呼び出しを書く場所を間違っています。
プログラム的に、ここに書くべきだとプログラムの流れから判断できると思いますので、プログラムの流れが見えていないのではないでしょうか?
※ C言語では、関数内からしか関数は呼び出せません。これはC言語の基本的文法です。C言語の入門書を併読される必要が有ると思います。

あと問題は、LoadDivGraph()関数の仕様を理解されていないところにあります。
「DXライブラリ置き場 リファレンスページ」
http://homepage2.nifty.com/natupaji/DxL ... .html#R3N3
こちらにある通りHandleBuf はint型のポインタで無くてはいけません。 複数のint値が格納されるので必須の条件です。
img_enemy[0][0] はint型なので方が違いエラーとなります。C言語の文法的な理解も必要かと思います。

Re: 10章でビルドエラーです。

Posted: 2013年9月29日(日) 15:07
by うさぎ太郎
Taruさん、softyaさんありがとうございました。
返事が遅くなり申し訳ありませんでした。
まず、返信の際ユーザー名がうさぎ太郎2であったことお詫びします。
返信の仕方がわからず、ユーザー名にうさぎ太郎としたところ、既に使われていますとエラーになり、やむなくユーザー名をうさぎ太郎2にしてしまいました。
クイック返信でよさそうなので、これからは大丈夫です。
また、codeタグの使い方は了解しました。すいませんでした。
では、本題の10章でのビルドエラーですが、改めて見直してみると、ご指摘の通りLoadDivGraph()関数の呼び出しが関数外に書かれていました。
早速コードを直してビルドしたところエラーが無くなりました。ありがとうございました。
今回のことで、プログラムの流れが見えていないことがよくわかりました。やはり、コピペではダメですね。また、エラーがなぜ発生したのかとかも全然わかりませんでした。C言語の基本ができてないことを痛感しました。
今後はもう一度C言語からやり直そうと思います。
以上いろいろご迷惑をおかけしました。
今後もよろしくお願いします。