1人でゲームが作れるように修行します。2 (487レス)
上下前次1-新
抽出解除 レス栞
87(3): SGGK ◆6pZCoAtaxk [sage] 2010/09/17(金) 00:11:53 ID:iwt7bbkw(1) AAS
ベクトルの構造体を宣言・定義したから、ボールや選手などのオブジェクトの
座標その他のメンバ変数を初期化するときには、例えば初期化関数の内部で
オブジェクト.x=848;
オブジェクト.y=544;
オブジェクト.z=0;
としていたのを
オブジェクト.構造体変数名 = {848、544、0};
にできるのではと期待して書いてみるとエラーになる。
略)\source\ballcontrol.cpp(45) : error C2059: 構文エラー : '{'
略)\source\ballcontrol.cpp(45) : error C2143: 構文エラー : ';' が '{' の前にありません。
略)\source\ballcontrol.cpp(45) : error C2143: 構文エラー : ';' が '}' の前にありません。
これと同じようなエラーをクラスのオブジェクトでやった経験を思い出し、
オブジェクト.構造体変数名.x=848;
オブジェクト.構造体変数名.y=544;
オブジェクト.構造体変数名.z=0;
と書いたらエラーは出なくなった。
これだけならまだしも関数の引数にも構造体を使おうとしているので、
これもエラーになったらどうしようかと思いつつ、動作している事を優先して作業を進め、 現在のバグは274個。
ネットで調べると自分では構造体を書いたつもりでいても、Cの構造体とC++の構造体には違いがあるらしくて、
自分が見たサイトの説明によれば、
実は、構造体はメンバがデフォルトで公開されているクラスである。
つまり、
"stuct X{" = "class X{ public :"
となる。クラスと構造体の差異はそれだけである。
との事。
Cで書いたベクトルの記事を本で見て、それを今まで書いてたC++のソースに
使おうとしたから、自分の気付かない理由で上手くいってない感じ。
まずは今のままで進めてみて関数にベクトル構造体を引数にしたところでも
問題が出るようなら、また考え直すつもり。
88(1): 名前は開発中のものです。 [sage] 2010/09/17(金) 02:15:46 ID:zNJRouQ+(1) AAS
>>87
見方を変えると「Cの構造体に関数も書けるようにしたものがC++の構造体」とも言えると思う
Cの構造体で出来ることはC++でもそっくりそのまま書けると思うんだけどね
>自分の気付かない理由で上手くいってない感じ。
バグに関して絶対こうだとは言えないが、CとC++の違いが原因ではないような気がするなー
89(1): 名前は開発中のものです。 [sage] 2010/09/17(金) 22:28:19 ID:pd/LBTti(1/2) AAS
>>87
x、y、zを初期化するコンストラクタを定義されていれば
オブジェクト.構造体変数名 = クラス名(848,544,0);
のような代入ができる。
もしくは、構造体変数をセットするメンバ関数を定義してもいいかも。
93(1): 名前は開発中のものです。 [sage] 2010/09/18(土) 01:45:54 ID:ZJvrb5gA(1/3) AAS
>>92
>ベクトル関係もクラス化する最終手段に挑戦してみようと思います。
>>87は自分で書いててよく分かってないみたいだけど、classとstructは根本的には同じもの
struct Vector3{
Vector3(float x_, float y_, float z_): x(x_), y(y_), z(z_){}
float x,y,z;
};
void main(){
Vector3 a(1,2,3);
cout << a.x << " : " << a.y << " : " << a.z << endl;
a = Vector3(4,5,6);
cout << a.x << " : " << a.y << " : " << a.z << endl;
}
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.033s