[過去ログ] Boost総合スレ part9 (981レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
851: デフォルトの名無しさん [] 2012/02/15(水) 19:46:15.26 AAS
>>850
850(1): デフォルトの名無しさん [sage] 2012/02/15(水) 15:40:45.11 AAS
今作成中のプログラムに<boost/thread.hpp>と<boost/thread/condition.hpp>をインクルードすると、システムのlocale_facets.tccとboostのshared_count.hppにおいて大量のエラーが発生します。
これらのファイル自体には問題は無く、何らかの依存関係でエラーが出ているんだろうということは想像がつくのですが、全く原因がわかりません。

何かこのような現象について心当たりのある方は居られないでしょうか。

Xcode4.2で、ヘッダーサーチパスには/opt/local/includeを(boostはこの下にインストール)設定しています。ライブラリーファイルのリンクも行っています。

よろしくお願いします。
ですが、自己解決しました。申し訳有りません。

原因はboostを使っているソースファイルとは別のファイル内で定義した「swap」という名称のマクロでした。
それぞれのソースファイルを最終的にmain関数で参照する形となっていたためにboost内の何かとマクロ名が衝突したようです。

自分で定義したswapをユニークな名称に変更することで解決しました。

今後どなたかの参考になれば幸いです。
852: デフォルトの名無しさん [sage] 2012/02/15(水) 19:49:52.51 AAS
こらたかし!マクロは全部大文字にって言ったでしょ!
853: デフォルトの名無しさん [sage] 2012/02/15(水) 21:30:41.91 AAS
さすがにswapをマクロ名にするのはないな
854: デフォルトの名無しさん [] 2012/02/15(水) 22:26:50.21 AAS
cpp側なら問題なかったのですが、実装も含めたヘッダーに書いてしまったのが盲点の原因でした...
855: デフォルトの名無しさん [sage] 2012/02/15(水) 22:40:49.07 AAS
気が、狂っとる
856: デフォルトの名無しさん [sage] 2012/02/15(水) 22:45:19.13 AAS
君は優秀な人材だぜひマイクロソフトに就職しなさい
857
(1): デフォルトの名無しさん [sage] 2012/02/15(水) 22:53:13.67 AAS
>cpp側なら問題なかったのですが
よくねぇよ。
規格にちゃんと、

「標準ライブラリーのヘッダーをincludeする翻訳単位は、全標準ライブラリーヘッダーで宣言されている名前を#defineもしくは#undefしてはならない。」

と書いてある。
だから、ひとつでもどれか標準ライブラリーのヘッダーをincludeしたならば、swapという名前は#defineも#undefもできない。
858
(1): デフォルトの名無しさん [sage] 2012/02/15(水) 23:06:42.94 AAS
min
max
859
(1): デフォルトの名無しさん [sage] 2012/02/15(水) 23:27:50.00 AAS
>>857
swapって名前標準ライブラリーにあるの?
860: デフォルトの名無しさん [sage] 2012/02/15(水) 23:29:27.19 AAS
あぁalgorithmにあるのか。使ったこと無かったわ。
861: デフォルトの名無しさん [sage] 2012/02/15(水) 23:29:55.03 AAS
嘘だろ…
862: デフォルトの名無しさん [sage] 2012/02/15(水) 23:34:09.02 AAS
iostreamをインクルードするだけで使えるというのに・・・。
863: デフォルトの名無しさん [sage] 2012/02/15(水) 23:44:50.77 AAS
>>859
名前だぞ名前。
クラスのメンバーにも等しく適用されると何故わからないんだ。
多くの標準ライブラリのクラスがswapという名前のメンバーを持っているのを知らないのか。
864: デフォルトの名無しさん [sage] 2012/02/16(木) 00:11:46.32 AAS
>>858
MSは禿にごめんなさいしないといけないよね
865: デフォルトの名無しさん [sage] 2012/02/16(木) 03:25:04.66 AAS
C++にテンプレートが無い様な時代から既に用意されてたんだから
後出しのハゲが謝りお願いすべき
866: デフォルトの名無しさん [sage] 2012/02/16(木) 03:49:30.66 AAS
小文字が入ってるマクロ名は紛らわしいから
コンパイラが警告吐いてくれたらいいのにな
867: デフォルトの名無しさん [sage] 2012/02/16(木) 07:22:59.71 AAS
assertみたいなマクロ実装関数で警告が出ることになるか
ところでassertをキーワードに昇格させて定数式なら
コンパイル時エラー出す設計にはできなかったのかな
そうするとstatic_assertと書き分けなくて良いような気もするけれど
868: デフォルトの名無しさん [sage] 2012/02/16(木) 12:13:03.95 AAS
例によってCとの互換性が
869: デフォルトの名無しさん [sage] 2012/02/16(木) 12:38:53.66 AAS
staticの方はともかくassertってあんまし使わなくねーか?
870: デフォルトの名無しさん [sage] 2012/02/16(木) 12:38:56.08 AAS
iOS開発でObjCのコンテナクラス類使わずにどうもSTL/boost多用してしまうんだけど
果たしてこれはよくないのかどうか・・・
871
(1): デフォルトの名無しさん [] 2012/02/16(木) 15:37:52.34 AAS
threadのwaitってどこのサイトみても

while(!ready) {
 cond.wait(lock);
}

のようになっていますよね。これを起こす場合には
ready = true;
cond.notify_all();
とすると思うのですが、while分の!readyを判定してからcon.waitをかけるまでの間に上記の起こすコードが呼ばれた場合には、動かなくなってしまう気がします。

これを回避する方法などあるのでしょうか。timed_waitでしょうか。
872
(2): デフォルトの名無しさん [sage] 2012/02/16(木) 18:47:36.71 AAS
>>871
cond.wait(lock);でロックを要求している素晴らしい設計を無視するなよ
873
(1): デフォルトの名無しさん [] 2012/02/16(木) 19:01:27.73 AAS
>>872
ありがとうございます。
よくよく考えてみるとwhile文の前と起こすコードの先頭でミューテックスをロックすればいいんですね。
今まで引っかかっていたものがスッキリとれました!
874: デフォルトの名無しさん [sage] 2012/02/16(木) 21:10:13.56 AAS
>>872,873を理解するまで1時間かかってしまった
875: デフォルトの名無しさん [sage] 2012/02/27(月) 18:51:24.80 AAS
1.49出たのに反応なしか
1-
あと 106 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.027s