1 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 14:09:22 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.44【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1194016813/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
756 名前:754 mailto:sage [2007/12/22(土) 23:09:01 ] ん?符号付き整数は未定義動作だけど、不動小数点数型は実装依存で 可能かもしれないな。
757 名前:754 mailto:sage [2007/12/22(土) 23:09:48 ] ごめん。 s/不動/浮動/
758 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 23:09:49 ] でも限度を超えたら増え続けないから n < n+1が成り立たなくなるよね
759 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 23:11:11 ] >>756 環境依存でいいのなら方法はそりゃあるけども。
760 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 23:12:23 ] >>758 だから何?
761 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 23:13:16 ] 何に対して「でも」なんだろう?
762 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 23:22:03 ] ここは一問一答スレですか?
763 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 23:35:54 ] >>727 BCBの場合はDelphiのExtended型との互換性のほうが大きいかも
764 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 00:55:55 ] void MsgBox( int a ) { char s[20]; sprintf(s, "%d", a); MessageBox(NULL, s , NULL , MB_OK ); }; 直接数字を表示したいのだが、一回文字列に変換しないといけないのかな?
765 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 01:03:39 ] 直接数字を表示できるMessageBoxを作ったらいいじゃないか
766 名前:デフォルトの名無しさん [2007/12/23(日) 01:12:22 ] 標準ライブラリとかで見かける名前空間の名前がついてない 「::operator new」 とか「::operator delete」ってなぜ 「std::operator new」とか「std::operator delete」じゃないんですか?
767 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 01:20:26 ] クラスのデータメンバに配列があって、この配列にコンストラクタ時に初期値入れたいのですがどうすればいいんですかね・・・? class DATA { private: int t; public: DATA(int x=5) { t=x; } }; であればコンパイルは通るのですが、 class DATA { private: int t[2]; public: DATA(int x[]=5)←??? { for(int i=0;i<2;i++)t[i]=x[i]; } }; だとできないんです・・・
768 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 01:29:27 ] DATA() { t[0]=t[1]=5; } でいいだろ なぜ()内にいれるのか不明
769 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 01:35:00 ] まず、配列のそものは引数にとれない ポインタで渡す。 参照は。。どうだっけ?
770 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 01:41:33 ] >>764 WindowsのMessageBoxのことだと思うけど、文字列に直さないとダメ。 MessageBox(NULL, (boost::lexical_cast<std::string>(a)).c_str(),NULL , MB_OK); とか >>766 ::newはstd::のnewじゃないから。 実体はどうだか知らんけど。
771 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 01:55:39 ] >>767 配列はポインタ渡しがいいと思う。 やりたいことは、コンストラクタのオーバーロードで出来ると思う。 DATA(int* x) { for (int i = 0; i < 2; i++) { t[i] = x[i]; // xの要素数が2以上ないと未定義 } } DATA( ) { for (int i = 0; i < 2; i++) { t[i] = 5; } } 要素数をマジックナンバにするのはよくないので、 適当にコンスタント宣言しときましょう。 const int T_ARRAY_MAX = 2; とか、センスないな。
772 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 02:07:22 ] >>768 >>769 >>771 お蔭様で問題解決できました! どうもありがとうございました。。
773 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 02:17:27 ] >>766 Koenig自動照合ができないからジャマイカ? operator new(size_t)では引数の型からstdを見に行くと いう判断ができない気がする。
774 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 03:33:13 ] あるブログで見かけた記事。 C++では共用体の代わりにreinterpret_castを用いるらしい。 1: int main( void ) 2: { 3: int x = 0x01234567; 4: char *c = new char[4]; 5: 6: c = reinterpret_cast<char*>( &x ); 7: 8: return 0; 9: } だからC++は安全で便利なんだね!!
775 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 04:20:54 ] ・・・どこからつっこめばいいんだ
776 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 04:24:47 ] アナル
777 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 08:57:29 ] anonymous 共用体が導入されたりと、 C++ では共用体はより強化されてるんだがな。 #include <iostream> int main() { union { int x; char c[sizeof(int)]; }; x = 0x01234567; for(int i = 0; i < sizeof(int); ++i) { std::cout << static_cast<int>(c[i]) << std::endl; } }
778 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 09:42:24 ] >>766 名前探索の都合上。 クラス型をnewするとき、クラス自身、基底クラス、大域名前空間という 自然な順にoperator newを探せるようになっている
779 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 11:37:22 ] 名前検索の順序だけど、Koenig照合は考えないとして、 Effective C++第三版の166ページのとおりだと以下になるけど クラス自身と基底クラスが異なる名前空間にある場合は 4.は間違いですよね? 1.ローカルスコープ 2.クラス自身 3.基底クラス 4.基底クラスを含む名前空間(間違いと思う) 5.大域名前空間 VC++ 2008で試したところ、 1.クラス自身 2.基底クラス 3.クラス自身を含む名前空間 4.クラス自身を含む名前空間を含む名前空間 (外側の名前空間へ向かって繰り返し) 5.大域名前空間 でした。
780 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 11:38:14 ] ローカルスコープが抜けていました。訂正します。 VC++ 2008で試したところ、 1.ローカルスコープ 2.クラス自身 3.基底クラス 4.クラス自身を含む名前空間 5.クラス自身を含む名前空間を含む名前空間 (外側の名前空間へ向かって繰り返し) 6.大域名前空間 でした。
781 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 11:45:06 ] すいません。 非常に悩んだのですが、多分ここが一番知っている方がいらっしゃると思って質問させて頂きます。 cc `Wand-config --cflags --cppflags` wand.c `Wand-config --ldflags --libs` というコンパイルオプションをmakefileにしたいんですが、 どうやればこれ、makeの文法に直せるんでしょうか? Wand-configというのはアプリケーションの名前で、/opt/local/binにインストールしてあります。
782 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 14:03:27 ] >>781 Wand-config … の出力を CFLAGS に入れときゃいいんじゃないの? ImageMagick か。
783 名前:デフォルトの名無しさん [2007/12/23(日) 14:44:43 ] 質問です。 C++からCの関数を呼び出すためにヘッダをincludeしたのですが ヘッダにC++の予約語(new)が構造体のメンバ変数として定義されていて コンパイルが通りません。 ヘッダファイルを変更せずに対応する方法はありますか? 環境はRedHatでGCC(G++)でコンパイルしようとしています。 最悪、個別にextern "C"で再定義すればよいのかなと思いますが それはやりたくないので。。。
784 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 14:46:27 ] >>783 > 最悪、個別にextern "C"で再定義すればよいのかなと思いますが それは多分通らないと思う。extern "C" はそういうのじゃないから。 多分ヘッダファイルを変更するしかないと思うんだよなぁ
785 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 14:56:07 ] >>783 #define new new_hoge #include "header.h" #undef new とか駄目かね
786 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 14:58:58 ] >>782 なるほど! 助かりました。 しかしなんでこんなややっこしい方法をImageMagickはとってるんだ。 おまけに全然日本語の情報ないし。 そこそこ歴史あるアプリなのに。
787 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 15:07:52 ] >>784 そうなんですか。 こまりましたね >>785 newだけだったらよいのですが、なんかあるたびにそれをやるのは ちょっと辛いです 普通に問題になりそうだしなんか回避策ないんですかね ググってもそれっぽいのは出てこないし
788 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 15:10:03 ] C++固有のキーワードで、変数名に使いそうなものってそれほどなさそうだけどなあ
789 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 15:15:24 ] >>786 むしろ合理的とも言えると思うけど。つまり、option は変わる可能性 がある(時代、OS, architecture 等によって)わけだから、自身に compile/load option を聞いてやるというだけ。特に大量に画像処理する 可能性を考えると細かいオプションも重要になってくることもありうるし。 俺は Magick++ 使ってるけど、多機能過ぎる程多機能で大変便利。 あと、使い易い。
790 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 15:18:04 ] >>787 素直にヘッダ書き換えるのが一番じゃないのかな。特によく使うなら。 単にコピーして直したバージョン作ればいいだけでしょ。
791 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 15:23:56 ] または>>785 の内容のヘッダファイルを作成して、 それをincludeすればいい。
792 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 15:25:05 ] >>790 いや、触れないヘッダなんですよね ほかのパッケージだから なんでC++からCを呼び出したいってのもあるんだけど なんで知ってる人いたら教えてくださいな
793 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 15:28:47 ] >>792 そのヘッダで宣言されている関数を呼ぶ、Cのソースを一つはさめばいいだろ。
794 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 16:42:52 ] 型と順番があってれば問題ないはずだから ライブラリ利用側だけヘッダを書き換えて使うとか。
795 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 20:08:08 ] CP932なマルチバイト文字列をCP932なワイド文字列に変換する簡単な方法ってないですか? Windows上でgcc 3.4.5(Mingw)を使ってます。
796 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 20:48:04 ] ああ、筋トレ気持ちいい
797 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 20:48:36 ] ごめん
798 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 20:49:35 ] >>796 スジトレ?どこのスジだよ。裏スジか?
799 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 21:00:47 ] 柔道部出身がマになっちゃう時代なんだよ・・・
800 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 22:09:56 ] うちにも短髪でえらくがたい良いのいるな
801 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 23:18:13 ] うちには男子校上がりのいい男がいる のんけでも平気で食っちゃうらしくておそれられてる
802 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 23:23:47 ] なんだ?クリスマスに備えて職場のイイ男自慢大会か?悪くないな
803 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 01:13:34 ] >CP932なワイド文字列 って何?
804 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 01:19:10 ] >>803 間違えました。正しくは「ワイルドな文字」です。申し訳ありません。
805 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 02:52:11 ] liboctaveを使って行列演算しようと思っているのですが、構造体内で行列の宣言をすることはできるのですか?
806 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 05:44:10 ] kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5574.zip 以上のzipファイル内Cプログラムを組んでいるのですが、どうにもうまくいかず立ち往生してしまいました。 同梱のテキストファイルに大よその概要を入れておいたので、何とか力になってもらえないでしょうか。
807 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 08:15:06 ] >>806 *p = next(p); だと、pが指し示す先の中身を書き換えるからおかしくなってんじゃないか? next() は構造体へのポインタを返すようにしたほうが良くないか。
808 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 09:52:36 ] ワイルドな文字って何だよw 文字コードを変換したいならとりあえず iconv 使えばいい。
809 名前:806 mailto:sage [2007/12/24(月) 10:11:12 ] 正直なところ言わんとしていることは理解できましたが、 結局どこをどう手直しすればいいのかわかりませんでした。 申し訳ないですがプログラム自体の手直しをしていただけると幸いです(;´д⊂)
810 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 10:35:19 ] VC2008EEのなんですけど。 ヘッダの一部分を特定の.CPPからインクルードされたときだけ 有効にするにはどうすればいいんでしょうか?
811 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 10:38:55 ] >>810 #if とか #ifdef
812 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 10:42:12 ] >>808 WindowsのAPIだとワイド文字=UNICODEな扱いで、 それ以外のワイド文字に出来ないので… iconvも素でワイド文字を扱おうとすると難しいようなカンジです。 結局自前で書いても20行くらいに収まったのでそれでなんとかしました。
813 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 11:59:01 ] VC2005でSSE使ってLONGLONGを足したり引いたりするにはどうしますか?
814 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 14:36:00 ] __FUNCTION__ マクロって標準なんでしょうか? それとも Visual C++ でしか使えないのでしょうか? デバッグ用のコードの中で多用しているのですが, いいのかなぁ,と思って.
815 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 14:46:36 ] BOOST_CURRENT_FUNCTIONの定義見てみるといいよ。
816 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 17:19:37 ] クリスマスに彼女が居ないんですがどうすればいいですか?
817 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 17:26:49 ] クリスマスに彼女が居ないんですがで2ちゃれ 腐るほど同じような書き込みがあるから
818 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 18:51:08 ] さっきからC/C++と3Pしようとしてるんですが、 C++が「Cとはもうそりが合わなくなった」とか言って3Pに応じてくれません。 どうしたらいいですか?
819 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 18:52:53 ] 吉利支丹の祝いらしいが幕府がおそろしゅうてかなわんわ
820 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 18:58:27 ] >>818 extern "C" かな?
821 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 19:02:32 ] >>818 そりゃ論理的に無理だな。
822 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 19:09:10 ] 99年から仲が悪くなったんだろうな
823 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 19:44:03 ] >>818 delete from C where standard = 1999;
824 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 19:47:59 ] こうじゃないのか。 delete standard from C where year = 1999
825 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 19:49:20 ] delete standard C where = 1999;
826 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 19:51:30 ] C/C++で書けよw
827 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 19:52:16 ] std::string と strsafe.h は 共存できないですか?
828 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 20:28:43 ] IBSQL *sql = new TIBSQL(); sql->SQL->Add("DELETE standard FROM C WHERE year = 1999"); sql->Close(); sql->Prepare(); sql->ExecQuery(); delete sql;
829 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 22:05:26 ] >>809 ↓こういうこと。全部はやんないよ。 struct LIST *next(struct LIST *next_p) { struct LIST *p = next_p; … p = next_p->next; … return p; } ポイントは以下の二つ。 ・引数の next_p に代入するのは止める。見通しが悪くなる。 ・戻り値はポインタに。
830 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 23:44:12 ] >>827 できないと思う理由は?
831 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 00:17:03 ] <string>の中が警告だらけになる気がするね。 そこでは安全に文字列関数を使っていると仮定して良いのだけど。 strsafe.hの関数は使うけど、既存関数の使用で警告を出さないようにする方法があると思う。
832 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 00:28:12 ] そういや未だstrcpyで警告出る理由わからないや
833 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 00:43:01 ] >>832 char tmp[10]; strcpy( tmp, "abcdefghij" ); 文字列リテラルなら分かりやすいけど、 これが argv[1] だったりすると?
834 名前:806 mailto:sage [2007/12/25(火) 01:27:12 ] >>829 丁寧にありがとうございます。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5579.c こんな感じになりました。が、やっぱりループから抜け出せなくなりました。 一応一周できてるので辿る値、順序は間違っていないと思うのですが、何が悪いのかやはりわかりません…
835 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 09:26:13 ] >>834 *p = *next(p); ↑これは p = next(p); じゃないのか? でないと p が示している先の値を書き換える。
836 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 10:36:02 ] テスト
837 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 13:16:42 ] ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5581.c 惑星の公転を例にN体問題のシミュレーションをするプログラムを↑のようにして作って 実行したのですが、 datファイルをみると振り子の運動のような形になっていて円(楕円)軌道を周回していないです。 どの辺を修正すればよいのでしょうか?
838 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 13:57:04 ] デバッグは自分でやれ
839 名前:836 [2007/12/25(火) 15:31:48 ] >>838 まあ、やってもわからないから聞いてるんですけどね。 やってわかるなら最初から聞きにきませんよ。 どっかの計算結果がおかしいのは明白でしょうけど・・・
840 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 15:34:14 ] class Hoge{ public: Hoge(); private: int m; }; みたいなクラスがあったとして。 Hoge::Hoge() : m(0) {} と Hoge::Hoge(){ m = 0; } ではどこが違うの?
841 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 15:39:25 ] 逆切れktkr プログラムとは関係ない周辺専門知識を要するんだから、 最低限、座標算出式の数式とかを書いてくれないと、正直ソース読む気にもならんな。
842 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 15:42:53 ] >839 実はさっきからいろいろ見てはいるんだけど、いまいちわかんない。 とりあえずdistの挙動が怪しげなので、見てみるといいかも。 あと、new_xはいいけど、new_vって必要?
843 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 15:48:20 ] const int m; に換えてみれば分かる。
844 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 15:54:26 ] RGBからYUV2に変換したいんですがどこか参考になるサイトありませんか?
845 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 16:02:06 ] 逆数
846 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 16:03:52 ] 1秒間に60回ピッタリと処理を繰り返すにはどうすればいいですか?
847 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 16:07:11 ] 60回やる→次の秒まで待つ
848 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 16:18:37 ] >>840 上はmを0で初期化してる。 下はmに0を代入してる。
849 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 17:00:04 ] C言語とC++の違いって何かあるんですか。
850 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 17:06:29 ] Cに機能が加わったのがC++
851 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 17:18:24 ] C言語とC++だと、細かいところで微妙に文法に互換がなくて、 それが混乱のもとになったりするよな。 C言語のプログラムといいつつ、だいたいC++コンパイラ でコンパイルして使うから、C言語とC++の文法が ゴチャゴチャになったプログラムが現実にいっぱい存在する。 C++にベターCの要素なんて入れないほうが、スッキリした気がする。
852 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 17:27:50 ] C++にベターCの要素を入れたとか根本から間違ってるぞ
853 名前:842 mailto:sage [2007/12/25(火) 17:51:46 ] >839 すまん、ずっと悩んでたの、単にgnuplotの使い方でこっちが大ポカやらかしてただけだった。 plot "Point2.dat" usi 4,6 ~ orz... 答えは>842であってる。new_vがいらない。 前のvじゃなく、できたてほやほやのaから計算したvを使って位置を出してください。
854 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 17:57:22 ] 逆ギレするだけのことはありますね
855 名前:842 mailto:sage [2007/12/25(火) 18:00:03 ] ちょっとまて、俺は逆ギレした奴じゃない。
856 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 18:32:20 ] >>855 なんで逆ギレしてないんだよ、キレろよ