【初心者歓迎】C/C++室 Ver.62【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/12/13(土) 00:23:18ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.61【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1226347371/l50
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
◆ソースのインデントについて
半角やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのが最も良いですが、
直接貼るのであれば、全角空白か に置換しておくことをお勧めします。
0153デフォルトの名無しさん
2008/12/16(火) 20:34:160154デフォルトの名無しさん
2008/12/16(火) 20:37:04頭冷やしてくる。
0155デフォルトの名無しさん
2008/12/16(火) 20:58:250156デフォルトの名無しさん
2008/12/16(火) 21:15:22それを言おうとしたが言い方を間違えたのが>>152だろ
0157デフォルトの名無しさん
2008/12/16(火) 21:18:23ごめんリロードしたつもりがしてなかったんです
0158デフォルトの名無しさん
2008/12/16(火) 22:26:260159デフォルトの名無しさん
2008/12/16(火) 22:30:02アドレス空間自体が32bitなので、オーバーフローして反対側から出てくる。
0160デフォルトの名無しさん
2008/12/16(火) 22:30:540161デフォルトの名無しさん
2008/12/16(火) 22:34:32pow(2,32)って32bitPCだと無理なの?
0162デフォルトの名無しさん
2008/12/16(火) 22:35:49なにをいまさらw
即レスでオーバーフローとか言われてただろ
0163デフォルトの名無しさん
2008/12/16(火) 22:38:140164デフォルトの名無しさん
2008/12/16(火) 22:38:45でも正常に動いてるんだけど内部でも絶対扱えてないの?
0165デフォルトの名無しさん
2008/12/16(火) 22:45:31すいませんこれ
(((*pv8)[(*pVec)[i*2+0]][si.nPos]) <= ((*pVec)[i*2+1]))
<=の左右式ごとにカッコでくくらないとまずいですか?
0166デフォルトの名無しさん
2008/12/16(火) 22:45:350167デフォルトの名無しさん
2008/12/16(火) 22:47:190168デフォルトの名無しさん
2008/12/16(火) 22:49:42そんだけ書けててわからないのがそこかよ・・・
0169デフォルトの名無しさん
2008/12/16(火) 22:54:420170デフォルトの名無しさん
2008/12/17(水) 00:00:340171デフォルトの名無しさん
2008/12/17(水) 00:16:43((*pv8)[(*pVec)[i*2+0]][si.nPos] <= (*pVec)[i*2+1])
を
((*pv8)[(*pVec)[i*2 ( +0]][si.nPos] <= (*pVec)[i ) *2+1])
こうされたらどうしようとか
((*pv8)[(*pVec)[i*2+0]] ([si.nPos] <= (*pVec)[i*2+1]))
こうされたらどうしようとか
そう思うのは逆に珍しいので、どう悩んだのか教えてもらえると、今後他の人に
教える時に役に立つかもしれない。
0172デフォルトの名無しさん
2008/12/17(水) 01:56:35以下のプログラムをstdio.h型ではなくiostream型に書き換えるとどうなるんでしょうか?
printfとかscanfとかはcinやcoutに書き換えられるってのは自分で調べて分かったのですがどうもコンパイルするとエラーになってしまうんです。
printfとかscanf以外にも書き換えられる部分があればお願いします。
あと、それぞれの行がどういった命令を出してるのか解説もお願いします…。
for(i=0;i<8;i++){//最初i=0でi<8まで増えていく
と言った感じで…。
#include <stdio.h>
int p,t,a,d,c,v,i,m[90]={0},s,r[]={-10,-9,-8,-1,1,8,9,10};
void k(){if(m[p]==0)
for(i=0;i<8;i++){
for(c=0,v=p+r[i];m[v]==3-t;v+=r[i])c++;
if(c&&m[v]==t){a+=c;v=p;
if(d)do m[v]=t,v+=r[i];
while(m[v]!=t);
}}}
char*h="・○●\n";
int main(){for(i=1,m[41]=m[49]=2;i<10;m[i++*9]=3)m[40]=m[50]=t=s=1;for(;;a=d=0){for(p=9;p<82;++p)k(),printf("%.2s",&h[m[p]*2]);
if(a)for(d=a=s=p=8;a==8;k())t-2?(scanf("%d %d",&p,&i),p+=i*9):++p;
else if(s)s=0,printf("pass");
else break;t=3-t;
}
return 0;
}
0173デフォルトの名無しさん
2008/12/17(水) 02:13:46死ね
0174デフォルトの名無しさん
2008/12/17(水) 02:49:160175例外
2008/12/17(水) 04:37:19書いたら例外を投げてることが分かるという利点と、
例外の種類が多くなるとソースが長くなると言う欠点があると思うのですが、
関数定義にthrowは書いたほうがいいのでしょうか?
0176デフォルトの名無しさん
2008/12/17(水) 05:15:090177デフォルトの名無しさん
2008/12/17(水) 06:11:08std::codecvtの使い方、および説明された書籍、URLなどを教えてください。
特に、~codecvt()がvirtualな理由を知りたい。
std::localeからの利用を意図し、std::codecvt自体はインターフェースなのか?
環境はVC90及びgcc4を想定。
説明用サンプルソースなどもあればよろしく。
以上よろしくお願いします。
0178デフォルトの名無しさん
2008/12/17(水) 06:17:00~codecvt()がprotectedな理由を知りたい。
0179デフォルトの名無しさん
2008/12/17(水) 07:42:01デストラクタが protected な場合は
派生クラスだけ作れるようにしたい場合じゃね。
0180デフォルトの名無しさん
2008/12/17(水) 08:21:22例外仕様のことだね?
例外を投げないことを示す throw () 以外は付けないのが C++ での流儀として定着しつつある。
0181デフォルトの名無しさん
2008/12/17(水) 09:04:59それは流儀というより、実用上仕方なくでわ?
0182デフォルトの名無しさん
2008/12/17(水) 09:33:17しかしそうは書かないから流儀って言ってんじゃね?
0183デフォルトの名無しさん
2008/12/17(水) 09:37:56たとえば Java のチェック付き例外仕様が使えたとしても、使う使わないの
それぞれにどっちが良いとも言いきれないようなメリット・デメリットがある。
後発の言語で同様のチェック付き例外仕様を採用した言語が少ない(無い?)ことから
考えても、「仕方なく」という感じはしない。
0184デフォルトの名無しさん
2008/12/17(水) 10:15:02throw(投げる例外)を付けるとエラー吐くコンパイラがあるからだと思うけどね。
もちろんそのコンパイラが標準C++に準拠していなければ、その仕様で正しい。
というか、時代的に仕方なかった。
と、俺は思う。
一方、仕方なくではなく単なる流儀だとした場合、つけるデメリットって何?
そしてつけないメリットって何?
0185デフォルトの名無しさん
2008/12/17(水) 10:23:58マンドクセ
付けないメリット
マンドクサくない
0186デフォルトの名無しさん
2008/12/17(水) 10:24:08読んどけ。
http://www.gotw.ca/publications/mill22.htm
> So here’s what seems to be the best advice we as a community have learned as of today:
> Moral #1: Never write an exception specification.
> Moral #2: Except possibly an empty one, but if I were you I’d avoid even that.
today つっても 2002 年なんだな。いいかげんに対応する日本語の文書がほしいところだ。
0187デフォルトの名無しさん
2008/12/17(水) 10:25:15ベンダーがあるけどな。
C++自体終わってるんじゃないか?
0188デフォルトの名無しさん
2008/12/17(水) 10:32:46Javaの資料だけど、後発の言語が導入しない理由を知るにはちょうど良いかと。
0189デフォルトの名無しさん
2008/12/17(水) 10:35:02C# の話もわかりやすい。
0190デフォルトの名無しさん
2008/12/17(水) 10:39:41これは全く別の話だ。
0191デフォルトの名無しさん
2008/12/17(水) 15:43:420192デフォルトの名無しさん
2008/12/17(水) 15:44:080193デフォルトの名無しさん
2008/12/17(水) 15:52:13たとえば次のようなコードがあったとします
class ClassA{
public:
ClassB cB;
//他の記述
};
class ClassB{
public:
ClassA cA;
//他の記述
};
とした場合、ClassAではClassBより先に書いているのでcBは作ることが出来ないのということで、
もし、どちらもクラス内部で、inline関数として書きたい場合は、あきらめてヘッダーでクラスを書いてその後に
inline void ClassB::関数名...
としていくしかないのでしょうか?
0194デフォルトの名無しさん
2008/12/17(水) 16:02:200195デフォルトの名無しさん
2008/12/17(水) 16:11:37無限ループってこわくね?
0196デフォルトの名無しさん
2008/12/17(水) 16:27:57先に〜に関しては
class ClassB;
で解決するが、それでも>>195
の言っている状況になるのでポインタで持つしかない
(いやほかの手もあるけどさ)
0197デフォルトの名無しさん
2008/12/17(水) 17:27:580198デフォルトの名無しさん
2008/12/17(水) 18:10:36MK_CONTROL+ MK_LBUTTON
と書かないで
if(MK_CONTROLが含まれているか?)
{
}
これどう書けばいいんでしょうか?
0199デフォルトの名無しさん
2008/12/17(水) 18:11:37てかフラグを足し算するな
0200デフォルトの名無しさん
2008/12/17(水) 18:24:100201デフォルトの名無しさん
2008/12/17(水) 18:30:31{
}
こうですか?
0202デフォルトの名無しさん
2008/12/17(水) 19:03:13これ異常部分だけ初期化終了とかさせられないんですか?
立ち上げなおしてバグのところまでいくのも一苦労なんですが・・・
アザートが多すぎて泣きそうです
0203デフォルトの名無しさん
2008/12/17(水) 19:13:11本当にC/C++の質問ならコード片を貼るなどしてもっと分かるように言え
0204デフォルトの名無しさん
2008/12/17(水) 20:01:57そうですよ。
>>202
ASSERTをコメントアウトするか、ASSERTが
出ないようにプログラミングすればよいと思うよ。
エラーが発生して終了したら、別プロセスで監視しておいて
再起動をかけるのも有用な対策の一つだよ。
0205デフォルトの名無しさん
2008/12/17(水) 20:20:41returnだと全部抜けるし
breakとcontinueの違いがよくわかりません。
:
goto a;
:
:
gotoPoint a;
:
のようなことはC++では出来ないんでしょうか?
0206デフォルトの名無しさん
2008/12/17(水) 20:21:19ありがとうございます!
0207デフォルトの名無しさん
2008/12/17(水) 20:27:13コンパイラ:gcc
コンパイルすると
無効なプリプロセスディレクティヴ #!
ってでるんですがどうすればエラー消えるでしょう?
0208デフォルトの名無しさん
2008/12/17(水) 20:28:300209デフォルトの名無しさん
2008/12/17(水) 20:34:21俺はif文がネストする場合の2段目以降のif文だけかな。詰めて書くのは。
大抵そうしてる。
0210デフォルトの名無しさん
2008/12/17(水) 20:37:46gotoあるよ
continueはループの中で使うよ
0211デフォルトの名無しさん
2008/12/17(水) 20:39:21C++でもgoto文あるよ。
continueとbreakの違いと使い分けも考え付かない程度なら
絶対使わないぐらいの考えでプログラムしといたほうがいいと思うけど。
0212デフォルトの名無しさん
2008/12/17(水) 21:05:32確認する方法ってないでしょうか?
0213デフォルトの名無しさん
2008/12/17(水) 21:12:20const で宣言されていようがメンバをいじれないと困る。
だから確認する必要も無いし、確認する方法も用意されていない。
0214デフォルトの名無しさん
2008/12/17(水) 21:21:000215デフォルトの名無しさん
2008/12/17(水) 21:29:160216デフォルトの名無しさん
2008/12/17(水) 21:39:25多重ループ脱出くらいしか使い道ないな
0217175
2008/12/17(水) 21:40:15返信ありがとうございます。
throw(A)と書くとエラーを出すコンパイラもあるんですね。
例外を投げないことを明示したい場合以外は宣言にthrow(A)を書かないことにします。
0218デフォルトの名無しさん
2008/12/17(水) 21:46:430219デフォルトの名無しさん
2008/12/17(水) 23:26:03なんで足し算しちゃだめなの?どういう不具合がある?
0220デフォルトの名無しさん
2008/12/17(水) 23:42:43MK_CONTROLやMK_LBUTTONが実際には複数のビットの組み合わせで、
それに重複がある場合は、足し算すると繰り上がって予期せぬビットが立つ可能性がある
フラグはビット演算子で扱うのが基本
0221デフォルトの名無しさん
2008/12/17(水) 23:45:36というものを書いた場合、Shiftも押されてた場合はどうするのってなる
0222デフォルトの名無しさん
2008/12/18(木) 00:00:56MK_* が互いにビット位置の重複がないという保証があって、尚且つ最上位ビットをマスクして
比較できるという条件がなきゃ使えないから。
0223デフォルトの名無しさん
2008/12/18(木) 00:32:030224デフォルトの名無しさん
2008/12/18(木) 00:43:38それはありじゃないか。少なくとも少し前にパフォーマンス比較したら
exception 関係入れて測定できるほど実行速度落ちた経験ある。
0225デフォルトの名無しさん
2008/12/18(木) 09:06:36try catchを頻繁に通過するとか、例外が頻繁に発生してるとか
throw用の一時オブジェクトを例外が発生しなくても生成してたりとか…
0226デフォルトの名無しさん
2008/12/18(木) 15:55:43throwしたときだけ専用のフローに入ると思ってるんだけど。
0227デフォルトの名無しさん
2008/12/18(木) 16:15:14.h
クラス名 obj(引数1, 引数2);
こうしないで
.h
クラス名 obj;
.cpp
obj(引数1, 引数2);
こうしたいのですが
0228デフォルトの名無しさん
2008/12/18(木) 16:24:51今どき、グローバル変数を使ってると嫌われるよ。
0229デフォルトの名無しさん
2008/12/18(木) 16:27:29関数と同じでスタック積んでたと思う
じゃないと例外発生時にジャンプ先が分からない
0230229
2008/12/18(木) 16:57:16まず、関数内にtry catchがある場合、関数実行時にアセンブラで5命令位増える
tryやcatchの数を増やしてもそれ以上命令数は増えない
次にtry実行時、mov命令で整数値を何所かに書き込んでる
try毎に同じ場所に違う値を書きこんでいるため、これを元にthrow時に現在のブロック化を特定している
throwでは関数をコールしているので、try時にセットした値をもとにブロックを特定し、
catchを順次検索して型が当てはまる場所へジャンプしていると思われる
実装依存の可能性もあるけど大体はこんな感じかと
以上、参考になれば。
0231デフォルトの名無しさん
2008/12/18(木) 16:58:38多分、setjumpと同じ様な事をしていると思う。
0232デフォルトの名無しさん
2008/12/18(木) 17:01:450233デフォルトの名無しさん
2008/12/18(木) 17:13:53externをつけたんですが、ストレージクラスが正しくないと出てコンパイルできません
やりたいのはこれです。
.h
extern CPen pen;
.cppのコンストラクタ内
pen = pen(PS_SOLID, 1, RGB(0,0,0) );
0234デフォルトの名無しさん
2008/12/18(木) 17:19:19↓
pen = CPen(PS_SOLID, 1, RGB(0,0,0) );
0235デフォルトの名無しさん
2008/12/18(木) 17:20:260236デフォルトの名無しさん
2008/12/18(木) 17:20:310237デフォルトの名無しさん
2008/12/18(木) 17:21:390238デフォルトの名無しさん
2008/12/18(木) 17:22:170239デフォルトの名無しさん
2008/12/18(木) 23:04:43class A
{
void Func()
{
if(B::pC != NULL)
{
B::pC = CClassC();
}
}
};
class B
{
CClassC* pC;
B(){ pC=NULL; }
};
0240デフォルトの名無しさん
2008/12/18(木) 23:09:23>これifのpCにNULLもポイントも入ってないんですがなんでですか?
何を根拠にそう判断したのかね。
0241デフォルトの名無しさん
2008/12/18(木) 23:10:320242デフォルトの名無しさん
2008/12/18(木) 23:42:31コンパイルが通らないようなコードでは、何が言いたいのか分からないとしか言いようがない……。
0243デフォルトの名無しさん
2008/12/19(金) 00:23:08>241>242には私に見えない何かが見えているのだろうか。
0244デフォルトの名無しさん
2008/12/19(金) 00:33:32pCの値をチェックしたタイミングがいつなのか謎過ぎるがNULLも有効なアドレスも入ってない訳無いだろ。チェックの仕方がおかしいんじゃないか?
あとB::pCっていうのは、一回変数を作ってb.pCみたいにしないと駄目。
そしてさらにpCはポインタだから*(b.pC) = CClassC();ってしなくちゃ。
ポインタがどういう物なのか分かってる?
0245デフォルトの名無しさん
2008/12/19(金) 00:53:28class Aでclass Bを参照しているのに定義が後
friend classでもないのにBのprivate要素をAが参照
static memberじゃないpCをstaticのごとく使っている
これが間違い「だらけ」じゃなければ、いったいなんだというのだ?
そもそもオマエは他人のフリをした239じゃないのか?
0246デフォルトの名無しさん
2008/12/19(金) 00:58:470247デフォルトの名無しさん
2008/12/19(金) 01:08:08privateだのstaticだのは省略されてるだけでしょ
それくらい汲み取れるだろ
0248デフォルトの名無しさん
2008/12/19(金) 01:14:200249デフォルトの名無しさん
2008/12/19(金) 01:16:04最低限コンパイルが通る形にしてから質問しろ。
質問する側もそうやれば自分で問題点が見えてくるだろ。
0250デフォルトの名無しさん
2008/12/19(金) 01:34:000251デフォルトの名無しさん
2008/12/19(金) 01:55:450252デフォルトの名無しさん
2008/12/19(金) 01:57:28オマエが他人に問題点を伝えられてないだけ。
ちゃんとコンパイルが通る形で書いて来い。
■ このスレッドは過去ログ倉庫に格納されています