【初心者歓迎】C/C++室 Ver.64【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/02/10(火) 00:25:51ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.63【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1231499251/
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
◆ソースのインデントについて
半角やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのが最も良いですが、
直接貼るのであれば、全角空白か に置換しておくことをお勧めします。
0153デフォルトの名無しさん
2009/02/21(土) 17:46:34超早いレス熱烈感謝あげ
typedef UINT (T::*mem_fn_t)();
が抜けていたんですか
mem_fn_tはstd::mem_fun_t関係のなんかと勝手に妄想してた
0154デフォルトの名無しさん
2009/02/21(土) 17:55:310155150,152
2009/02/21(土) 18:25:38あいやーーー、俺、mem_fun_tは第一引数で渡すオブジェクトのポンタ
でオブジェクトを指定するっての忘れてたYo,orz
return mf(px); が正解だな
0156デフォルトの名無しさん
2009/02/21(土) 18:44:46#include <stdarg.h>
とやって、
va_list, va_arg
を使えばいいでしょうか?
0157デフォルトの名無しさん
2009/02/21(土) 19:06:54ただし可変長引数の部分に非PODクラスを渡すことはできないから注意な
0158デフォルトの名無しさん
2009/02/21(土) 20:25:07これって自分何か勘違いしてますか?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&に変えられないというエラー
0159デフォルトの名無しさん
2009/02/22(日) 10:48:070160デフォルトの名無しさん
2009/02/22(日) 12:13:57A ? B : C の B と C が両方左辺値なら問題ないし、
const 参照なら右辺値でも問題ない。
0161デフォルトの名無しさん
2009/02/22(日) 20:58:16int n;
if (cond) n = X;
else n = Y;
みたいにするなら、
int n = cond ? X : Y;
のほうがいいって書いてあったよな。
0162デフォルトの名無しさん
2009/02/22(日) 21:38:050163デフォルトの名無しさん
2009/02/22(日) 22:39:03? : を使わざるを得ないけどね。
0164デフォルトの名無しさん
2009/02/23(月) 00:53:15if (cond) n = X;
変数には初期値いれとこうぜ
0165デフォルトの名無しさん
2009/02/23(月) 01:06:47ソースを読む人間を翻弄する
0166デフォルトの名無しさん
2009/02/23(月) 09:12:42template<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)); と同じ意味になる筈
0167デフォルトの名無しさん
2009/02/23(月) 20:33:23C++で実現するにはどうすればいいでしょうか?
一応自分なりに調べましたが、ShellExecute()やCreateProcess()を使うのは
個人的に美しくないかな、、、と思います。
知人に相談したら、vbsで
set objShell = WScript.CreateObject("WScript.Shell")
objShell.Exec "net localhost〜"
ってやればいいんじゃない、とアドバイスを受けましたが、
vbsは全くわかららず、正直、自分でメンテナンスできるとは思えません。
C++のライブラリ関数で実現する方法があったら教授お願いします。
C言語では組み込み系を少しやっていました。
最近、C++でちょっとしたwindows用のプログラムを作ることになりました。
C++は初心者レベルだと思います。
開発環境はwindows XP + Visual studioです。
よろしくお願いします。
0168デフォルトの名無しさん
2009/02/23(月) 20:38:57APIをたたくしかないな。Win32スレに行ってみたら。
0169デフォルトの名無しさん
2009/02/23(月) 20:40:47プロセスを起動するのはOSの役割なのでOSのAPIを使う
って頭になれば問題ない
0170デフォルトの名無しさん
2009/02/23(月) 20:43:22騙されているぞ。
そのVBSのコードはShellExecuteを呼ぶのと同じだ。
0171デフォルトの名無しさん
2009/02/23(月) 21:11:43>>168-170 回答ありがとうございました。
C++のライブラリにはないのですね。
なんとなく、(いないとは思いますが)netコマンドを削除する人がいたら嫌だな
という浅い考えで、ライブラリを使いたいと思っていました。
>>168さんの忠告どおりWin32スレに行こうと思いますが、
もうちょっと自分でWin32を調べてからにしたいと思います。
正直、何をどう質問すればいいのか、というのがわからない状態ですので、、、
(結局、>>169さんの忠告どおり、割り切りそうな気がしますが)
>>170さん そうなんですか。まあ、知人もこっちのほうが簡単だよ、
っていう感じだったので、悪意はなかったと思います
どうもありがとうございました。
0172デフォルトの名無しさん
2009/02/23(月) 22:04:01C++で学んだことを生かす練習のためにもなにか作りたいのですが・・
0173デフォルトの名無しさん
2009/02/23(月) 22:10:57コンパイラ&リンカ
0174デフォルトの名無しさん
2009/02/23(月) 22:41:03ありがとうございます
自分の力じゃ無理そうなのでアルゴリズムから作っていこうと思います
0175デフォルトの名無しさん
2009/02/24(火) 10:15:530176デフォルトの名無しさん
2009/02/24(火) 15:37:215と8どちらを答えるべきなんですかね。
パディングも含めた値が実際の答えなのでしょうか?
0177デフォルトの名無しさん
2009/02/24(火) 15:43:080178デフォルトの名無しさん
2009/02/24(火) 16:17:40答えはsizeof( A )だろ
0179デフォルトの名無しさん
2009/02/24(火) 19:12:55お前まぢ頭いいな
0180デフォルトの名無しさん
2009/02/24(火) 19:43:180181デフォルトの名無しさん
2009/02/24(火) 19:44:540182デフォルトの名無しさん
2009/02/24(火) 20:08:55ありがとうございました。
0183デフォルトの名無しさん
2009/02/24(火) 22:27:13俺の環境では5になるんだが
0184デフォルトの名無しさん
2009/02/24(火) 23:19:58#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;
}
0185デフォルトの名無しさん
2009/02/25(水) 01:13:18処理系依存なのでどれも正解ということですか!
コードまでご丁寧にありがとうございました。
0186デフォルトの名無しさん
2009/02/25(水) 09:51:490187デフォルトの名無しさん
2009/02/25(水) 11:38:22#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を使っています。
0188デフォルトの名無しさん
2009/02/25(水) 11:47:000189デフォルトの名無しさん
2009/02/25(水) 11:47:45やったことないけど
http://pinoki.la.coocan.jp/wiki/?Cygwin%2FInstall%2F%C6%FC%CB%DC%B8%EC%B2%BD
0190デフォルトの名無しさん
2009/02/25(水) 12:08:46cygwin自体が日本語の入出力をできない状態なら>189へ。
gccのコンパイルオプションについて知りたいならcygwinスレへ。
まぁ、動くかどうかは兎も角scanf()の使い方も間違っているわけだが。
使わないに越したことはないが、scanf("%29s", name)とするのが無難。
0191デフォルトの名無しさん
2009/02/25(水) 12:11:180192デフォルトの名無しさん
2009/02/25(水) 15:13:301>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>
をインクルードすると上記のエラーが出ます
どうすればいいのですか;;
0193デフォルトの名無しさん
2009/02/25(水) 15:24:46を、どれか正しいものに変更する
なんか他の外部ライブラリ使ってるだろ?
0194デフォルトの名無しさん
2009/02/25(水) 15:26:17いったんすべてのオブジェクトを削除してビルドしなおせばいい
ほかから持ってきたライブラリ結合してるならリンクオプションをそれにあわせる
0195デフォルトの名無しさん
2009/02/26(木) 06:44:150196195
2009/02/26(木) 06:51:07スレ移動します
0198デフォルトの名無しさん
2009/02/26(木) 10:37:070199デフォルトの名無しさん
2009/02/26(木) 12:19:360200デフォルトの名無しさん
2009/02/26(木) 12:23:180201デフォルトの名無しさん
2009/02/27(金) 02:01:54class Foo { void Bar(void* ptr); };
void Foo::Bar(void* const ptr) {}
VisualC++2008 にてこの様なクラスを作ったところ、コンパイルエラーも警告も出ずにコンパイルが通りました。
疑問に思ったのは Foo::Bar の引数を、void* から void* const に変えてもエラーが出ない事です。
これは文法的に正しいんでしょうか?それともVC++の独自拡張だったりするんでしょうか。
0202デフォルトの名無しさん
2009/02/27(金) 02:10:380203デフォルトの名無しさん
2009/02/27(金) 02:21:40class Foo { void Bar(int ptr); };
void Foo::Bar(int const ptr) {}
が問題ないのと同じこと。
0204デフォルトの名無しさん
2009/02/27(金) 02:51:20仮引数にconstをつけるのは実装と宣言で違っても文法的に問題無いのですね。
勉強になりました、ありがとうございました。
0205デフォルトの名無しさん
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);
ですが、どれも使われるのでしょうか。
0206デフォルトの名無しさん
2009/02/28(土) 05:13:20do { --i; hoge(i); } while (i > 0);
0208デフォルトの名無しさん
2009/02/28(土) 05:36:00do {
hoge(i);
} while (i-- != 0);
これだと、MがT型の最大値でも対応できるはず。
0209デフォルトの名無しさん
2009/02/28(土) 06:46:33普通に for (size_t i = N - 1; i >= 0; --i) を使ってるけど
size_tを使う理由が分からない
0210デフォルトの名無しさん
2009/02/28(土) 08:29:35メモリのサイズを意味するときはsize_tを使うようにしてる
64ビット環境だとunsigned long longになるのかな
0211デフォルトの名無しさん
2009/02/28(土) 11:52:40> i >= 0;
↑は符合無しだと常に真だろ。
0212デフォルトの名無しさん
2009/02/28(土) 11:53:480213デフォルトの名無しさん
2009/02/28(土) 11:54:56if (N > 0) for (i = N - 1; i >= 0; --i) {;} // ループ中に前後の値が関わってくる場合。
while 系をカウントループに使うのは愚策と考える。
0214デフォルトの名無しさん
2009/02/28(土) 12:02:05やめられない、とまらない
0215デフォルトの名無しさん
2009/02/28(土) 12:33:44--が矢印に見えるから「Nを0にするまで」って視覚的にわかりやすいじゃん
0216デフォルトの名無しさん
2009/02/28(土) 12:39:170217デフォルトの名無しさん
2009/02/28(土) 12:43:37そんな餌にクマー
まあでも>>205の要求にあってるしシンプルでわかりやすいな
0218デフォルトの名無しさん
2009/02/28(土) 13:16:49ああ、意外と面白い使い方かも・・・
視覚的にわかり易く書かない場合は
>0は書かなくても大丈夫か
0219デフォルトの名無しさん
2009/02/28(土) 14:09:160220デフォルトの名無しさん
2009/02/28(土) 14:16:210221デフォルトの名無しさん
2009/02/28(土) 14:20:360222デフォルトの名無しさん
2009/02/28(土) 16:14:420223デフォルトの名無しさん
2009/02/28(土) 17:18:11while(N-->0) って見た目が素敵だな
0224デフォルトの名無しさん
2009/02/28(土) 17:23:550225デフォルトの名無しさん
2009/02/28(土) 17:39:460226デフォルトの名無しさん
2009/02/28(土) 17:41:03ほぼ記号だろw
0227デフォルトの名無しさん
2009/02/28(土) 20:31:33ためにな・・・って、あれ?
0228デフォルトの名無しさん
2009/03/01(日) 18:45:19専門的にお願いします。
0229デフォルトの名無しさん
2009/03/01(日) 18:49:470230デフォルトの名無しさん
2009/03/01(日) 20:00:35専門的にお願いします。
0231デフォルトの名無しさん
2009/03/01(日) 20:01:140232デフォルトの名無しさん
2009/03/01(日) 20:38:29メモリのサイズを入れる型ってsize_t以外になんかなかった?
0233デフォルトの名無しさん
2009/03/01(日) 20:50:58専門的にお願いします。
0234デフォルトの名無しさん
2009/03/01(日) 20:55:57反復も繰り返しだろうけど、お前は違い分からないだろう
0235デフォルトの名無しさん
2009/03/01(日) 21:26:000236デフォルトの名無しさん
2009/03/01(日) 21:29:11もうちょっとかっこいい言い方あるだろ
それを教えろ
0237デフォルトの名無しさん
2009/03/01(日) 21:31:09死ねハゲ
0238デフォルトの名無しさん
2009/03/01(日) 21:31:470239デフォルトの名無しさん
2009/03/01(日) 21:47:200240デフォルトの名無しさん
2009/03/01(日) 22:14:30見事な繰り返し処理
>>232は空気嫁
0241デフォルトの名無しさん
2009/03/01(日) 22:19:39ssize_tとか、でもCでもC++でも標準ではないけど。
0242デフォルトの名無しさん
2009/03/01(日) 22:24:27ptrdiff_tのこと?ポインタ同士の引き算の型だからちょっと違うが
0243デフォルトの名無しさん
2009/03/01(日) 22:34:14そうだな。size_tでよかった。
0244デフォルトの名無しさん
2009/03/03(火) 05:50:11ボタンを押したら実行するようにしたいので
ShellExecute(Handle,"open",ファイル名.c_str,NULL,NULL,SW_SHOW);
と書いたのですが、うまくいきません・・・どなたか教えてくださいOTL
0245デフォルトの名無しさん
2009/03/03(火) 06:13:52何故、どう巧くいかないのか書かないのですか?
0246デフォルトの名無しさん
2009/03/03(火) 06:28:56バッチファイルの中身自体が実行されません;;
0247デフォルトの名無しさん
2009/03/03(火) 06:39:59pause
入れとけ
0248デフォルトの名無しさん
2009/03/03(火) 07:00:46ありがとうございます。
やってみたところ指定されたパスがありませんとのことでした。
普通にbatファイルを起動すると何も問題がないのですが・・・
原因などわからないでしょうか?
0249デフォルトの名無しさん
2009/03/03(火) 07:08:140250デフォルトの名無しさん
2009/03/03(火) 07:12:19こんな時間に、質問に答えてくださりありがとうございました
大変助かりました。
0251デフォルトの名無しさん
2009/03/03(火) 18:34:32入っている場合もポインタの宣言なんでしょうか?
static unsigned int * ADDR;
スペースが、後だけのもは参考書にも紹介されていますが
前後両方ともスペースのものは見つかりませんでした。
よろしくお願いいたします。
0252デフォルトの名無しさん
2009/03/03(火) 19:01:49■ このスレッドは過去ログ倉庫に格納されています