1 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 00:25:51 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.63【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1231499251/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm ◆ソースのインデントについて 半角やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのが最も良いですが、 直接貼るのであれば、全角空白か に置換しておくことをお勧めします。
152 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 17:21:28 ] すまん。元の122のコードのmem_fn_tのmem_fn_t mf = ptd->second;の行は UINT (T::*mf)() = ptd->second;が正しい。 改行制限でtypedefをやめたのに直すのを忘れていたみたいだ。 そしたらVC++2005でも通る。
153 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 17:46:34 ] >>152 超早いレス熱烈感謝あげ typedef UINT (T::*mem_fn_t)(); が抜けていたんですか mem_fn_tはstd::mem_fun_t関係のなんかと勝手に妄想してた
154 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 17:55:31 ] >>141 は医者か
155 名前:150,152 mailto:sage [2009/02/21(土) 18:25:38 ] >>150 あいやーーー、俺、mem_fun_tは第一引数で渡すオブジェクトのポンタ でオブジェクトを指定するっての忘れてたYo,orz return mf(px); が正解だな
156 名前:デフォルトの名無しさん [2009/02/21(土) 18:44:46 ] C++で可変長引数の関数を作るときは、Cと同じように #include <stdarg.h> とやって、 va_list, va_arg を使えばいいでしょうか?
157 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 19:06:54 ] Cと同じでおk ただし可変長引数の部分に非PODクラスを渡すことはできないから注意な
158 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 20:25:07 ] ↓がg++4なら通るけどVC9など通らない。 これって自分何か勘違いしてますか?VC9のバグってことはありませんか? struct MyClass { int value; void set_value(int v) { value = v; } int get_value(void) const { return value; } }; vector<std::tr1::shared_ptr<MyClass> > v; ...vに適当に要素を入れる... for_each(v.begin(), v.end(), std::tr1::bind(&MyClass::set_value, std::tr1::placeholders::_1, std::tr1::bind(&MyClass::get_value, std::tr1::placeholders::_1))); // bindでintがint&に変えられないというエラー
159 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 10:48:07 ] 参照変数の初期化の右辺値で三項演算子使うのはマトモな所業の範疇?
160 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 12:13:57 ] 右辺値じゃなくて右辺だな。 A ? B : C の B と C が両方左辺値なら問題ないし、 const 参照なら右辺値でも問題ない。
161 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 20:58:16 ] C++ コーディングスタンダードで、 int n; if (cond) n = X; else n = Y; みたいにするなら、 int n = cond ? X : Y; のほうがいいって書いてあったよな。
162 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 21:38:05 ] cond次第だろ
163 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 22:39:03 ] 参照だとそもそも if-else が使えないから ? : を使わざるを得ないけどね。
164 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 00:53:15 ] int n = Y; if (cond) n = X; 変数には初期値いれとこうぜ
165 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 01:06:47 ] 俺のソースは>>161 ,164のすべてを気分で使い分けて、 ソースを読む人間を翻弄する
166 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 09:12:42 ] テンプレートクラスのコンストラクタ引数にその実態クラスのstaticメンバを使用する記述は問題ない? template<T> class BB{ BB(const T &); static const T func(T a){retunr a + 1;}; }; int x = 0; BB<int> i(i.func(x)); // BB<int> i(BB<int>::func(x)); と同じ意味になる筈
167 名前:デフォルトの名無しさん [2009/02/23(月) 20:33:23 ] 質問ですが、例えば"net localgroup Administrators GroupX"というコマンドを C++で実現するにはどうすればいいでしょうか? 一応自分なりに調べましたが、ShellExecute()やCreateProcess()を使うのは 個人的に美しくないかな、、、と思います。 知人に相談したら、vbsで set objShell = WScript.CreateObject("WScript.Shell") objShell.Exec "net localhost〜" ってやればいいんじゃない、とアドバイスを受けましたが、 vbsは全くわかららず、正直、自分でメンテナンスできるとは思えません。 C++のライブラリ関数で実現する方法があったら教授お願いします。 C言語では組み込み系を少しやっていました。 最近、C++でちょっとしたwindows用のプログラムを作ることになりました。 C++は初心者レベルだと思います。 開発環境はwindows XP + Visual studioです。 よろしくお願いします。
168 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 20:38:57 ] C++のライブラリにはないから、 APIをたたくしかないな。Win32スレに行ってみたら。
169 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 20:40:47 ] >>167 プロセスを起動するのはOSの役割なのでOSのAPIを使う って頭になれば問題ない
170 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 20:43:22 ] >>167 騙されているぞ。 そのVBSのコードはShellExecuteを呼ぶのと同じだ。
171 名前:デフォルトの名無しさん [2009/02/23(月) 21:11:43 ] >>167 です。 >>168-170 回答ありがとうございました。 C++のライブラリにはないのですね。 なんとなく、(いないとは思いますが)netコマンドを削除する人がいたら嫌だな という浅い考えで、ライブラリを使いたいと思っていました。 >>168 さんの忠告どおりWin32スレに行こうと思いますが、 もうちょっと自分でWin32を調べてからにしたいと思います。 正直、何をどう質問すればいいのか、というのがわからない状態ですので、、、 (結局、>>169 さんの忠告どおり、割り切りそうな気がしますが) >>170 さん そうなんですか。まあ、知人もこっちのほうが簡単だよ、 っていう感じだったので、悪意はなかったと思います どうもありがとうございました。
172 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 22:04:01 ] コンソールアプリケーションで実用的なプログラムってありますか? C++で学んだことを生かす練習のためにもなにか作りたいのですが・・
173 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 22:10:57 ] >>172 コンパイラ&リンカ
174 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 22:41:03 ] >>173 ありがとうございます 自分の力じゃ無理そうなのでアルゴリズムから作っていこうと思います
175 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 10:15:53 ] 圧縮アルゴリズムおもろいよ
176 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 15:37:21 ] 構造体A(メンバchar a , int b)をsizeofした値を求めろって問題は 5と8どちらを答えるべきなんですかね。 パディングも含めた値が実際の答えなのでしょうか?
177 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 15:43:08 ] intのサイズすら環境依存でFA
178 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 16:17:40 ] >>176 答えはsizeof( A )だろ
179 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 19:12:55 ] >>178 お前まぢ頭いいな
180 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 19:43:18 ] ('A`)に見えた
181 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 19:44:54 ] sizeof に目がなくて
182 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 20:08:55 ] sizeof('A`)だと8なのでやはり8が答えみたいですね ありがとうございました。
183 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 22:27:13 ] >>182 俺の環境では5になるんだが
184 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 23:19:58 ] >>182 環境依存 #include<stdio.h> #define MACRO(type) printf("sizeof(%s)=%d\n", #type, sizeof(type)) #pragma pack(push, 1) struct pack1{ char a; int b; }; #pragma pack(pop) #pragma pack(push, 2) struct pack2{ char a; int b; }; #pragma pack(pop) #pragma pack(push, 4) struct pack4{ char a; int b; }; #pragma pack(pop) int main(void){ MACRO(struct pack1); MACRO(struct pack2); MACRO(struct pack4); return 0; }
185 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 01:13:18 ] なんと… 処理系依存なのでどれも正解ということですか! コードまでご丁寧にありがとうございました。
186 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 09:51:49 ] 処理系というか、自分で決められるといった方が正しい
187 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 11:38:22 ] #include <stdio.h> #include <string.h> struct address{ char name[20]; char jusyo[21]; int age; }; int main(void) { struct address abc; int s = 1; if(s = 1){ char name[30]; char jusyo[70]; int age; printf("名前? "); scanf("%s", &name); printf("住所? "); scanf("%s", &jusyo); printf("年齢? "); scanf("%d", &age); abc.age = age; strcpy(abc.name, jusyo); } return(0); } C言語を学習しています。 上プログラムでキーボードから日本語を入力し出力させたいのですが、どうすればいいのでしょうか? Cygwinを使っています。
188 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 11:47:00 ] printf使えば良い
189 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 11:47:45 ] >>187 やったことないけど pinoki.la.coocan.jp/wiki/?Cygwin%2FInstall%2F%C6%FC%CB%DC%B8%EC%B2%BD
190 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 12:08:46 ] >>187 cygwin自体が日本語の入出力をできない状態なら>189へ。 gccのコンパイルオプションについて知りたいならcygwinスレへ。 まぁ、動くかどうかは兎も角scanf()の使い方も間違っているわけだが。 使わないに越したことはないが、scanf("%29s", name)とするのが無難。
191 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 12:11:18 ] 構造体のメンバとローカル変数の配列サイズが違うじゃん。それは拙いっしょ。
192 名前:デフォルトの名無しさん [2009/02/25(水) 15:13:30 ] 1>LINK : warning LNK4098: defaultlib 'LIBCMT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。 1>libcpmtd.lib(xdebug.obj) : error LNK2019: 未解決の外部シンボル __malloc_dbg が関数 "void * __cdecl operator new(unsigned int,struct std::_DebugHeapTag_t const &,char *,int)" (??2@YAPAXIABU_DebugHeapTag_t@std@@PADH@Z) で参照されました。 1>libcpmtd.lib(xdebug.obj) : error LNK2019: 未解決の外部シンボル __free_dbg が関数 "void __cdecl operator delete(void *,struct std::_DebugHeapTag_t const &,char *,int)" (??3@YAXPAXABU_DebugHeapTag_t@std@@PADH@Z) で参照されました。 1>C:\Documents and Settings\\デスクトップ\Game\ActionGame\/GameAppli\ActionGame.exe : fatal error LNK1120: 外部参照 2 が未解決です。 #include <fstream> をインクルードすると上記のエラーが出ます どうすればいいのですか;;
193 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 15:24:46 ] プロジェクトのプロパティ→C/C++→コード生成→ランタイムライブラリ を、どれか正しいものに変更する なんか他の外部ライブラリ使ってるだろ?
194 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 15:26:17 ] デバッグ版とリリース版のオブジェクトが混在しているように見える いったんすべてのオブジェクトを削除してビルドしなおせばいい ほかから持ってきたライブラリ結合してるならリンクオプションをそれにあわせる
195 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 06:44:15 ] staticメンバ関数を利用するメリットってあるんでしょうか?
196 名前:195 mailto:sage [2009/02/26(木) 06:51:07 ] すいません スレ移動します
197 名前:195 ◆Ci3UmwhFqY mailto:sage [2009/02/26(木) 07:18:27 ] >>196 は他人です
198 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 10:37:07 ] 何でメリットがないと思ったのか、それが知りたい。
199 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 12:19:36 ] つnew, singleton
200 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 12:23:18 ] コールバック関数のポインタを取るCスタイルのAPIへなんとかしてクラスを配送したいときに
201 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 02:01:54 ] 質問です。 class Foo { void Bar(void* ptr); }; void Foo::Bar(void* const ptr) {} VisualC++2008 にてこの様なクラスを作ったところ、コンパイルエラーも警告も出ずにコンパイルが通りました。 疑問に思ったのは Foo::Bar の引数を、void* から void* const に変えてもエラーが出ない事です。 これは文法的に正しいんでしょうか?それともVC++の独自拡張だったりするんでしょうか。
202 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 02:10:38 ] 文法的にOK
203 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 02:21:40 ] >>201 class Foo { void Bar(int ptr); }; void Foo::Bar(int const ptr) {} が問題ないのと同じこと。
204 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 02:51:20 ] >>202-203 仮引数にconstをつけるのは実装と宣言で違っても文法的に問題無いのですね。 勉強になりました、ありがとうございました。
205 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 05:09:10 ] とても基本的なことなのですが、 符号なし整数の変数で与えられた数 N - 1 から 0 まで順番に処理をするループは、どう書くのが一般的ですか。 for (size_t i = N - 1; i >= 0; --i) だとダメですよね。 自分が考えた書き方は、 const size_t N = ...; for (size_t i = N; i > 0; --i) hoge(i - 1); for (size_t i = 0; i < N; ++i) hoge(N - i - 1); for (size_t i = N - 1; i != ~0; --i) hoge(i); ですが、どれも使われるのでしょうか。
206 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 05:13:20 ] size_t i = N; do { --i; hoge(i); } while (i > 0);
207 名前:206 mailto:sage [2009/02/28(土) 05:14:35 ] ああ、書いてから気づいたけど >>206 は N が初めから 0 だったらダメだね
208 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 05:36:00 ] T i = M; //M = N - 1ということで do { hoge(i); } while (i-- != 0); これだと、MがT型の最大値でも対応できるはず。
209 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 06:46:33 ] >>205 普通に for (size_t i = N - 1; i >= 0; --i) を使ってるけど size_tを使う理由が分からない
210 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 08:29:35 ] >>209 メモリのサイズを意味するときはsize_tを使うようにしてる 64ビット環境だとunsigned long longになるのかな
211 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 11:52:40 ] >>209 > i >= 0; ↑は符合無しだと常に真だろ。
212 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 11:53:48 ] 何か問題でも?
213 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 11:54:56 ] for (i = 0; i > N; ++i) {;} // ループ中に前後の値が影響しない場合。 if (N > 0) for (i = N - 1; i >= 0; --i) {;} // ループ中に前後の値が関わってくる場合。 while 系をカウントループに使うのは愚策と考える。
214 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 12:02:05 ] >>212 やめられない、とまらない
215 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 12:33:44 ] while(N-->0)は普通に使うだろ --が矢印に見えるから「Nを0にするまで」って視覚的にわかりやすいじゃん
216 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 12:39:17 ] その考えはなかった
217 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 12:43:37 ] >>215 そんな餌にクマー まあでも>>205 の要求にあってるしシンプルでわかりやすいな
218 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 13:16:49 ] >>215 ああ、意外と面白い使い方かも・・・ 視覚的にわかり易く書かない場合は >0は書かなくても大丈夫か
219 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 14:09:16 ] 有名だろ、それ
220 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 14:16:21 ] ぶっちゃけ初めて見た
221 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 14:20:36 ] ソース自体は見た事があるような気もするけど、考え方は初めて見た。
222 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 16:14:42 ] 減少していくのに減少していく方向が空いてるのはなんとなく怖いなぁ
223 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 17:18:11 ] >>215 while(N-->0) って見た目が素敵だな
224 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 17:23:55 ] AAのプログラム言語とかなら、見た目で分かりやすいかもな・・・
225 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 17:39:46 ] befungeのことですね!!
226 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 17:41:03 ] 面白そうだけど絶対コーディングしにくいな ほぼ記号だろw
227 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 20:31:33 ] さすがショートコーディングスレ。 ためにな・・・って、あれ?
228 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 18:45:19 ] 繰り返し処理のことを何ていいますか? 専門的にお願いします。
229 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 18:49:47 ] 反復処理とか繰り返し処理とか
230 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 20:00:35 ] 繰り返し処理のことを何ていいますか? 専門的にお願いします。
231 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 20:01:14 ] 反復処理とか繰り返し処理とか
232 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 20:38:29 ] >>210 メモリのサイズを入れる型ってsize_t以外になんかなかった?
233 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 20:50:58 ] 繰り返し処理のことを何ていいますか? 専門的にお願いします。
234 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 20:55:57 ] ループ処理じゃね?w 反復も繰り返しだろうけど、お前は違い分からないだろう
235 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 21:26:00 ] ぶっちゃけC/C++の話じゃないからスレ違い
236 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 21:29:11 ] >>234 >>231 >>229 もうちょっとかっこいい言い方あるだろ それを教えろ
237 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 21:31:09 ] >>236 死ねハゲ
238 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 21:31:47 ] 反復処理とか繰り返し処理とか
239 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 21:47:20 ] リピート
240 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 22:14:30 ] >>228-231 見事な繰り返し処理 >>232 は空気嫁
241 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 22:19:39 ] >>232 ssize_tとか、でもCでもC++でも標準ではないけど。
242 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 22:24:27 ] >>232 ptrdiff_tのこと?ポインタ同士の引き算の型だからちょっと違うが
243 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 22:34:14 ] >>241 >>242 そうだな。size_tでよかった。
244 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 05:50:11 ] まだ初心者なのですが、batファイルをC++builder6で ボタンを押したら実行するようにしたいので ShellExecute(Handle,"open",ファイル名.c_str,NULL,NULL,SW_SHOW); と書いたのですが、うまくいきません・・・どなたか教えてくださいOTL
245 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 06:13:52 ] >>244 何故、どう巧くいかないのか書かないのですか?
246 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 06:28:56 ] 実行はされるのですが(コマンドプロントが一瞬表示される) バッチファイルの中身自体が実行されません;;
247 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 06:39:59 ] batの最後に pause 入れとけ
248 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 07:00:46 ] >>247 ありがとうございます。 やってみたところ指定されたパスがありませんとのことでした。 普通にbatファイルを起動すると何も問題がないのですが・・・ 原因などわからないでしょうか?
249 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 07:08:14 ] ファイルパスをちゃんと指定すればいいじゃん・・・
250 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 07:12:19 ] できました! こんな時間に、質問に答えてくださりありがとうございました 大変助かりました。
251 名前:デフォルトの名無しさん [2009/03/03(火) 18:34:32 ] 以下のような感じで「*」の前後にスペースが 入っている場合もポインタの宣言なんでしょうか? static unsigned int * ADDR; スペースが、後だけのもは参考書にも紹介されていますが 前後両方ともスペースのものは見つかりませんでした。 よろしくお願いいたします。
252 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 19:01:49 ] vector<string> * const (&u)[buf]; // こんな感じですか?