07/10/05 22:49:15
C++で下みたいな方法ってよろしくないですかね・・・
配列に入れた座標データを,オペレータオーバーライドを使って計算したいんですが
要素毎にコンストラクタ呼び出しは冗長になるので
問題点が判らないので指摘をお願いします
#include <stdio.h>
float data[] = {1., 2., 3., 4., 5., 6.};
class Data
{
public: // use default ctor
float x, y, z;
Data& operator+=(const Data &right)
....省略...
};
int
main()
{
Data *ptr;
ptr = reinterpret_cast<Data*>(data);
printf("%f %f %f\n", ptr[0].x, ptr[0].y, ptr[0].z);
printf("%f %f %f\n", ptr[1].x, ptr[1].y, ptr[1].z);
return 0;
}
289:デフォルトの名無しさん
07/10/05 22:53:53
>>287
勝手に追加されちゃうから無理じゃね?
std::mapを包含したクラス作ってインデクサの中で例外投げるとかしか思いつかない
290:デフォルトの名無しさん
07/10/05 23:00:43
>>289
stringの方をラッピングするのもアリじゃね?
書く量としてはその方が少なくなりそう。
291:デフォルトの名無しさん
07/10/05 23:00:58
>>289
そうですか、残念
ありがとうございました
292:デフォルトの名無しさん
07/10/05 23:15:10
>>288
>コンストラクタ呼び出しは冗長
といってもinlineであれば実質気にするほど変わらない気がする。
Dataがfloatピッタリ3つ分で収まるという保証があるのだろうか?データメンバーが後から追加されたりする可能性は?
virtualな関数をもつとサイズが変わったりする様だし、危険を伴う気がします。
293:デフォルトの名無しさん
07/10/05 23:36:17
assert(sizeof(Data) == sizeof(float[3])); を書いとくとか
294:デフォルトの名無しさん
07/10/05 23:43:21
>>292,293
Thx
対象がRAWなベタデータなので簡素に出来ないかと思ったのですが
素直な書き方をした方がよさげですね
295:デフォルトの名無しさん
07/10/06 03:46:16
>>284-286
フォーマットって普通に文字列なんだな。
>>285の方法は知らなかった。参考にさせて貰います。
色々試してみたけど、やりたいこともこれで出来そう。 ありがとね。
296:デフォルトの名無しさん
07/10/06 03:51:51
>>288
× オーバーライド
○ オーバーロード
297:デフォルトの名無しさん
07/10/06 16:19:13
wcout はバグがありますか?
wcout を使うのは避けてますか?
WindowsXP Home + BCC
298:デフォルトの名無しさん
07/10/06 17:10:25
char *hogehoge(){
return "hogehoge";
}
文字列リテラルの場合、変数と違って関数を抜けても有効なままなんでしょうか?
299:デフォルトの名無しさん
07/10/06 17:11:10
有効なままです
300:デフォルトの名無しさん
07/10/06 17:11:56
リテラル返すならconst char*にした方がいいかも
301:デフォルトの名無しさん
07/10/06 18:41:45
inline const char *&
302:デフォルトの名無しさん
07/10/06 18:45:41
&はイラネーだろ
なんか違うのか?
303:デフォルトの名無しさん
07/10/06 18:47:11
inline const const char *&
304:デフォルトの名無しさん
07/10/06 18:52:50
C++超初心者です。
今まで動いていたのに、今日コンパイルすると、
(1029) invalid format string conversion
と表示されてしまいます。
原因が分からず、どのように変えたらよいのかも分かりません。
ご教授宜しくお願いいたします。
すごく長いプログラムなので、関係してそうなところだけ書き込んでます。
FILE *ottq;
ottq = fopen("ottq.dat", "w");
double chir,l
l=20.05e-3;
chir=0.0e-5;
fprintf(ottq, "l(m)=\t%le\t\n",l);
fprintf(ottq, "chir(%)=\t%le\t\n",chir*100.0); ←1029行目ここです。
fclose(ottq);
305:デフォルトの名無しさん
07/10/06 18:54:02
%→%%
306:デフォルトの名無しさん
07/10/06 18:54:48
>>304
エラーメッセージのまんまだろ。
307:デフォルトの名無しさん
07/10/06 19:02:37
こえぇ
お前みたいなのが扱うもんじゃねぇだろ
308:デフォルトの名無しさん
07/10/06 19:09:25
変数名きめぇwwwww