[表示 : 全て 最新50 1-99 101- 201- 2chのread.cgiへ]
Update time : 06/01 19:34 / Filesize : 69 KB / Number-of Response : 293
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【初心者歓迎】C/C++室 Ver.64【環境依存OK】



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でのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのが最も良いですが、
直接貼るのであれば、全角空白か に置換しておくことをお勧めします。


31 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 20:01:43 ]
>>29
大丈夫ではあるけど、
関数内で二度と a の元の値を使えなくなってしまうので注意。
後になって処理を追加した際に、
途中で値が変更されてるのを忘れて処理を追加して
上手く動かねーとかなるといけないから、
なるべくなら別変数を作った方が好ましいし、
それでも a を変更したいんだ!ってんなら、コメントでも残しておくといい。

32 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 20:28:26 ]
>>30-31
ありがとうございます

33 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 21:19:28 ]
int func(int& a, int* b = &a)
{
if(a>10)
a=10;
return *b++;
}


34 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 21:44:16 ]
int func(const int a){ return (a>10)? 10+1: a+1; }

wwww


35 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 23:05:14 ]
急に過疎ってどうしたんだ?

36 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 23:29:01 ]
春だからさ・・・・・

37 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 02:10:04 ]
Cとgrassのハイブリッド言語かと思った。

38 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 02:43:26 ]
grass と 常用単語の堺は3文字あたりから?

void fp(int (*s)[8]);
void fr(int& s[8]);

any(){
int s[8];
int sx[32][8];
int* sp[8];
int* sxp[32][8];
int o[16];
enum{a...b=32}x;

fp(&s);
fp(&(sx[x]));
fp(sp);
fp(*(sxp[x]));
fp(&((int*[8])o));
fr(s);
fr(sx[x]);
fr(*sp);
fr(**(sxp[x]));
fr(*((int*[8])o));
}
どっかに考え方が判り易くまとまった資料ない?
正解不正解はコンパイル通してみるまで判らない自分。


39 名前:デフォルトの名無しさん [2009/02/14(土) 03:23:09 ]
windowsアプリケーションなんですが
Borland C Compiler 5.5にて
MAKELONGマクロが警告にひっかかってしまいます。
windef.hの定義を見るに括弧が足りないのが原因のようです。
これは単純にwindef.hのミスですか?BCCのミスですか?私の設定ミスですか?



40 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 07:52:34 ]
>>39
windef.hのミスだね
本家のWinDef.hは括弧が多かった
#define MAKELONG(a, b) ((LONG)(((WORD)(((DWORD_PTR)(a)) & 0xffff)) | ((DWORD)((WORD)(((DWORD_PTR)(b)) & 0xffff))) << 16))


41 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 07:55:25 ]
調べなおしてみたらVC+2008EEに付属のSDKは括弧が多かったが昔のPlatformSDKのは少なかったわ


42 名前:39 mailto:sage [2009/02/14(土) 11:12:03 ]
>>40-41
ありがとうございます。
MAKELONGを(あとMAKEWORDも)
#undefして括弧増やした#defineしなおしてもいいもんでしょうかね?

43 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 11:43:07 ]
>>42
しなおしてもいいし大元のファイルを修正してもいいし警告無視してもいいよ
簡単にすると( A | B << 16 )ってなるから ( B )に括弧が必要というわけか



44 名前:43 mailto:sage [2009/02/14(土) 11:45:56 ]
( B << 16 )に括弧が必要
の間違いでした

45 名前:39 mailto:sage [2009/02/14(土) 12:34:59 ]
>>43-44
どうもでした。

46 名前:デフォルトの名無しさん [2009/02/15(日) 08:59:26 ]
LPTSTRを使って
char hoge[40];
みたいな固定長の、文字を入れておける場所を定義するのって出来ますか?


47 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 09:13:07 ]
TCHAR s[40];
がいいかな

48 名前:デフォルトの名無しさん [2009/02/15(日) 09:18:16 ]
ありがとうです。
それでできました!


49 名前:デフォルトの名無しさん [2009/02/15(日) 09:24:24 ]
もう一個だけ質問させてください。
_T("ddd");
TEXT("ddd");
これって書き方が違うだけで同じですか?




50 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 09:39:22 ]
同じ。
強いて言うなら、前者はCライブラリの拡張で、後者はWin32。
ちなみに前者のバリエーションで_TEXTもある。

51 名前:デフォルトの名無しさん [2009/02/15(日) 23:26:08 ]
ありがとうございます。なるほど。
TCHARとかLPTSTRとかにあわせて、TEXT("")を使います。


52 名前:デフォルトの名無しさん [2009/02/15(日) 23:33:30 ]
背景とカーソルを同時に表示しようと思うんですが、
その画像をまとめてメモリデバイスコンテキストに選択して、
「最終的に表示する画面」を先に作る方法が分からないので、
どなたか教えていただけないでしょうか。

環境は WinAPIです。

よろしくおねがいします

53 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 00:09:31 ]
それはカーソルじゃなくてキャレットのことかね?

54 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 00:45:17 ]
関数の引数に関数を渡すことはできませんか?
処理の途中で指定した関数を入れたいんです。

55 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 00:46:34 ]
>>54
関数ポインタというのがあってだな

56 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 00:51:08 ]
thx出てきました!

57 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 01:02:45 ]
// class A
void Func(){}
X.pfFunc = Func;

// class X
void (*pfFunc)();
void Shori(void pfFunc()){
(*pfFunc)();

これどうやって引数に渡す時と、使うとき書けばいいですか?



58 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 01:09:27 ]
>>53
すいません言い方が悪かったです

画像2枚だと考えてください
背景の画像と 矢印の画像です。

よろしくおねがいします

59 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 01:51:58 ]
>>58
WinAPIスレにでもどうぞ。

>>57
メンバ関数は普通の関数ポインタとは振る舞いが異なるので注意。
「メンバ関数のポインタ」とでもして、検索してみることをお勧め。



60 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 03:19:29 ]
コンストラクタってパブリックにしないとだめですよね?
newするときアクセスできないとか言われるんですが、内部でよんでくれるんじゃなかったんですか?

61 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 03:53:17 ]
ポインタは使い終わったらNULLしたほうがいいんですか?
NULLしないでポインタを持っていたクラスをdeleteしたらポインタがゴミとして残るんでしょうか?
というかそうしたら変数も解放しなきゃいけないのですか?どうやんお?

62 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 04:04:37 ]
>>61
NULLするってなんだよ?

63 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 04:08:33 ]
>>61
どうやんお? でちょっと笑た

ポインタとメモリの動的確保についてもーちょい学ぶべき
NULLするってのはNULL入れるってことかい

64 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 04:12:26 ]
ポインタはオマエ自身から持つ手綱
データはペットの犬
手綱は他人のペットにも付けられるが そのペットは苦しい。

自分の飼っている犬の手綱はポイチョと捨てると他人に迷惑だが
他人のペットに付けた手綱はポイチョと捨ててもあまり問題にはならない。
他人のペットも譲られて唯一の飼い主がオマエになればオマエに責任が

65 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 04:22:53 ]
難読Cコンテストを思い出した

66 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 04:28:14 ]
メンバ関数ポインタは入れる時と使うときクラス名が必要なことがわかりました!
これじゃあライブラリとして使えなく無いですか?
設計を見直せですか?

67 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 04:29:23 ]
定数へのポインタは渋谷のハチ公に首輪をつけるようなもの
全くの無意味ではないが楽しく一緒に遊んでくれない。

土佐犬にチワワ用の首輪を付けても首じゃなく足首に掛かったりして土佐犬を転ばせたりする。
だからと言ってロデオロープ的な void * で括ってアチコチ引き回したら犬が昇天する場合もある

68 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 04:37:03 ]
やばい
全く集中できなくなった

69 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 05:07:23 ]
関数の中で
static int a = 0;
とした場合このaは関数を抜けても保持されるんでしょうか?
起動時最初の一回しか変数が存在しないことになるんでしょうか?



70 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 05:38:57 ]
>>69
スコープがブロック内に限定されてるだけで、他はグローバル変数と同じと言える

だからアドレスを渡して関数外からアクセスしようが問題ない



71 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 06:06:42 ]
ありがとうございます!!!
>>60>>61>>66
もお願いします!

72 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 06:50:02 ]
構造体の配列を引数に渡して使うにはどうすれば書けばいいでしょうか

structA a[] = { { 1, 2, }, {3, 4,}, };

//ClassX.h
Class* Z;

//ClassX.cpp
Z = new ClassZ();
Z->func(a);

//ClassZ.h
void func(structA bufa);

//ClassZ.cpp
func(structA bufa){
sizeof(bufa);
}

このときsizeofで帰ってくる値はどういう値ですか?

73 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 06:57:12 ]
>>72
structAが何バイトか(C99だとそういいきれないけど別にいいだろう)


配列渡すなら

void func(structA bufa[]);
//ClassZ.cpp
func(structA bufa[]){
sizeof(bufa);
}

とでもすればいい、ただしこれは

void func(structA *bufa);
//ClassZ.cpp
func(structA *bufa){
sizeof(bufa);
}
と等価なのでsizeof(bufa)はどちらもポインタのサイズになる(配列のサイズではない)

74 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 07:12:22 ]
構造体の各値がintだとすると
{ { 1, 2, }, {3, 4,}, }

4個*4バイト=16バイト
が返るようにするにはどうすればいいですか?

[]付けたんですけど
funcの中で

structA b[];
b = bufa;

としたらstructA[]からstructA[]に変換できませんとでるんですがこれはどうなおせばいいでしょうか

75 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 07:24:43 ]
structA b[100];
bに代入はできない
b[0] = とかはできるけど


76 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 07:27:03 ]
>>66
C# の delegate を参考にしてみれ。

class delegate {
public:
 virtual ~delegate() { }
 virtual void operator()() = 0;
};

template <typename T>
class delegateT : public delegate {
public:
 typedef void (T::*Mfn)();
 delegateT(T* obj, Mfn mfn) : m_obj(obj), m_mfn(mfn) { }
 virtual void operator()() { (m_obj->*m_mfn)(); }
private:
 T* m_obj;
 Mfn m_mfn;
};

77 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 07:31:00 ]
boost::bind.hpp
boost::function.hpp
を使うとか


78 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 10:57:01 ]
>>75
C++でも出来ないとこってあるんですね
サイズは送り元で計算して引数は増えますが一緒におくることにしました。
受取側の関数で構造体の配列変数を除くと1つ目の構造体しか表示確認できなかったんですが、
サイズを添え字にして強引?に全配列をプログラム実行の中で処理できました。
が、これ保障されてますか?安心してこういう使い方して大丈夫なんでしょうか?

79 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 12:11:20 ]
C#の中のコード全然意味わかりません
boost調べたら簡単にできました。
ありがとうです!

//classA
CC* pC;
CB* pB;
pB->Func(bind(&CC::Update, ref(pC)));

//classB
void CB::Func(function<void ()> f_buf)
{
f_buf();
}

// classC
void CC::Update(){}



80 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 12:38:17 ]
いややっぱりなにも進展してませんでした
function<void ()> f_buf

function<int ()> f_buf
だったり
function<bool ()> f_buf
だったりした場合、汎用ライブラリにしたとして、使うたびに修正しないとだめじゃないですか?
メンバ関数ポインタと結局同じなことに気づきました・・・

81 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 12:39:55 ]
operator()()
これはどういう意味なんでしょうか

82 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 12:49:04 ]
>>81
関数オブジェクトでぐぐったら使い方含めてわかるかもよ

83 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 13:16:23 ]
>>60
こういう風にnewとprivateなコンストラクタを組み合わせる技法は存在する。
class Hoge
{
public:
static Hoge* Craete(int x) {return new Hoge(x);}
private:
Hoge(int);
}

84 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 13:19:07 ]
出来そうな気がしてきました。
実行したい処理を()演算子の中に作ったクラスを型にした変数を引数として渡せば、
クラスの変数();
とすれば処理が実行されるということですね
ありがとうございました。

85 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 13:20:31 ]
>>80
実は、function<int ()>型やfunction<bool ()>型からfunction<void ()>型へ変換できる。
戻り値を見ないなら全部function<void ()>型にすればいい。

86 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 16:24:20 ]
sprintfの逆のことをしたいのですがそういう関数なかったでしょうか?
char str[]="年齢は10,性別は男";
例えば、(str,"年齢は%d,性別は%s",age,sex)の引数が与えられると
age=10,sex=男が得られるようにする関数です。
よろしくお願いします。

87 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 16:26:24 ]
sscanf のこと?

88 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 16:40:27 ]
>>87
それです。^^;
あったような気がしていたのですがprintが
入っている名前の関数だと思い込んで探していました。
助かりました。ありがとうございました。

89 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 11:39:57 ]
コールバック関数が今だに理解できないです。教えてください。



90 名前:43 mailto:sage [2009/02/18(水) 11:43:30 ]
>>89
関数ポインタはわかるか

91 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 12:00:21 ]
わかります。
void Func(){}
void * f = Func;
(*f)();

92 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 12:03:45 ]
オブジェクトを作成するアプリケーションのインスタンスハンドルが必要だとヘルプに書いてあるんですが
この場合thisを入れればいいんですか?

93 名前:43 mailto:sage [2009/02/18(水) 12:22:54 ]
>>91
コールバック関数のポインタを引数にして渡す
#include <stdio.h>

/* callback用関数 1*/
int add(int a, int b)
{
return a+b;
}
/* callback用関数 2*/
int sub(int a, int b)
{
return a-b;
}
void func(int (*callback)(int, int))
{
int x = callback(1, 2);
printf("%d\n", x);
}
int main(void)
{
/* "addへコールバックしてね" */
func(add);
/* "subへコールバックしてね" */
func(sub);
return 0;
}


94 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 12:26:57 ]
>>92
状況によるだろう。
でもハンドルと書いてあるからthisはないと思うよ。
なんとなく、hInstanceいれるとこみたいだが。

95 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 12:38:56 ]
>>93
ありがとうです!
その場合CALLBACKがつくのはどれなんでしょうか
メンバ関数もコールバックとして渡せるんですか?

96 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 12:41:45 ]
Win32アプリの
LRESULT CALLBACK WndProc
はまた別物ですか?

97 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 14:22:14 ]
WaitForSingleObjectは普通マルチスレッドで使うんですよね?
勝手に別スレッドで待機して制御は返す仕組みじゃないですよね?

98 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 14:25:43 ]
まあそうだが、シングルスレッドでもオブジェクトがシグナル状態か確認する時も使う。

99 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 14:43:22 ]
>>96
CALLBACKがどう#defineされてるか見てみるといい



100 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 14:49:12 ]
gdb 用のGUI ツールお勧め教えて
class 関連 CUI じゃツライす

101 名前:43 mailto:sage [2009/02/18(水) 16:26:59 ]
>>95
コールバックをする関数の引数に定義された型と同じ関数(戻り値の型と引数の数、型が同じ関数)を作ってその関数名を渡せばいいんだよ
メンバ関数は呼び出し規約(CALLBACK = stdcall)が違う(thiscall)かもしれない

102 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 17:09:50 ]
>>96
そのコールバックは、引数の処理をどうするか、という指標なんであまり気にしなくて良いと思う

103 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 20:51:27 ]
struct V4 {
 union {
  struct { float x, y, z, w; };
  float m[4];
 };
};
と書いた時、
xのアドレス == &m[0] 、yのアドレス == &m[1]、 …
になったのですが、これはどんなコンパイラでやっても同じ様になるんでしょうか?

104 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 21:43:59 ]
xのアドレス == &m[0]だけは保証されてる
あとはコンパイラ次第

105 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 21:45:58 ]
>>96
LRESULTは戻り値の型、>>91でのvoid、
WndProcは関数名、>>91でのFuncにあたる。
CALLBACKは他の人の言うとおり。

106 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 21:46:44 ]
キーボード押しっぱなし時のWM_KEYDOWNは、一回発行された後に
少し時間を置いてから連続で発行されるんですか?

キーボードからの入力でキャラクタを動かしているのですが、
キーボードおしっぱ→キャラクタが1ループ分動く→コンマ数秒無反応
→キャラクタが連続で動く、となってしまいます。

ゲームのキャラクタみたいにキーボードを押すとすぐに連続で動作してくれる
処理をしたいのですが・・

107 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 21:53:06 ]
>>106
GetAsyncKeyState

108 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 22:08:17 ]
>>107
こんな便利なものが・・・
ありがとうございます。

109 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 04:45:06 ]
マルチスレッドの関数はグローバル領域に作ったほうがいいですか?
クラスの中に入れるとめたくそ難しいんですが



110 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 05:12:32 ]
難しいと思うのならクラス内に作らなくても構いません。

111 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 05:24:48 ]
なんでメンバ関数だとコンパイルできないんですか?
静的関数ならいんでしょうか

112 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 05:34:41 ]
そりゃぁ、スレッド生成するAPIがクラスに対応してなければインスタンスへのポインタ(this)を渡せませんから。
thisを伴わない静的メンバ関数ならAPIから呼べますから、コンパイルもできるはずです。

まぁ、環境も書かなきゃエラーメッセージも書かないということは、詳しい説明は要らないのでしょうし、この辺で。

113 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 05:55:23 ]
いやいります。見捨てないでください

AfxBeginThread(CView::Proc, this);

//h
static UINT __cdecl Proc( LPVOID pParam );
static UINT __cdecl ProcAfter( LPVOID pParam );

//cpp
UINT CView::Proc( LPVOID pParam )
{
 CView *const this_ptr = (CView *)pParam;
 return this_ptr->ProcAfter();
}
UINT CView::ProcAfter( LPVOID pParam )
{
 //実際にマルチスレッドで実行したい処理
}

なぜこう書かないといけないのかが理解できません。直接
AfxBeginThread(CView::ProcAfter, this);
こうしたいんですが、エラー出まくります。&CView::ProcAfterにしろとか、やっても仮想関数だとかになるんです。
Afxじゃくても_beginthreadexでも同じなんです。マルチスレッドをクラスのメンバでやるのはそうとう強引で特殊ですか?

114 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 06:19:42 ]
>>113
にほんごよめますか?

>112
>まぁ、環境も書かなきゃエラーメッセージも書かないということは

115 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 13:37:43 ]
Win32アプリのメッセージループ内で独自の処理をする時クラスのインスタンスとかを作るのはどこがいいんですか?
ループに入る直前でいいんですか?いろいろなところにここにコードを追加してくださいとか書いてあるので不明です

116 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 13:42:45 ]
#define _T("test.txt") fileName
マクロの仮パラメータリスト内に予期せぬ文字列がありますのエラーが出ます。
どう書けばいいんですか?

117 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 13:56:14 ]
あきらかに変だがどう使いたいわけ?

118 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 14:19:28 ]
文字を置き換えたいだけです。
プログラム中のどこだかわからなくなるので
先頭に置いてファイル名を変えられるようにしたいんです

119 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 14:38:07 ]
だったら逆だろ?
#define filename _T("test.txt")



120 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 14:56:56 ]
逆でしたか!どうもです

121 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 17:46:10 ]
>>113
(非静的な)メンバ関数は普通の関数と違い、&演算子を使わないとメンバ関数へのポインタを得られない
という点はエラーメッセージの言うとおり。

そうやってメンバ関数へのポインタを得たところで、>>113のようにできないわけは、
メンバ関数へのポインタは、普通の関数へのポインタとは中身が異なっているため。
その主な理由は、仮想関数にもきちんと対応しないといけないことから。

メンバ関数を直接渡せるようにしたければ、自分でそういう関数を作ればいいじゃない。

122 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 17:47:35 ]
というわけでやってみた。普通は関数オブジェクトを引数にすべきだろうけど。改行制限厳しい。VC++ 2008。SP1ならもう少し簡単になる。
#include <utility>
#include <memory>
#include <stdio.h>
#include <process.h>
#include <windows.h>
#include <atlbase.h>
class Hoge {public: UINT Proc() {puts("Hoge::Proc"); return 0;}};
template<typename T>
UINT __stdcall beginthread2_entry(void* p) {
  typedef std::pair<T*, UINT (T::*)()> thread_data_t;
  thread_data_t* ptd = static_cast<thread_data_t*>(p);
  T* px = ptd->first;
  mem_fn_t mf = ptd->second;
  delete ptd;
  return (px->*mf)();
}
template<typename T>
HANDLE beginthread2(T& x, UINT (T::*memFn)(), int priority = THREAD_PRIORITY_NORMAL, UINT stack = 0, DWORD flags = 0, LPSECURITY_ATTRIBUTES lpsa = 0) {
  typedef std::pair<T*, UINT (T::*)()> thread_data_t;
  std::auto_ptr<thread_data_t> ptd(new thread_data_t(&x, memFn));
  uintptr_t ret = _beginthreadex(lpsa, stack, beginthread2_entry<T>, ptd.get(), flags, 0);
  if (ret != 0)
    ptd.release();
  return reinterpret_cast<HANDLE>(ret);
}
int main() {
  Hoge hoge;
  ATL::CHandle h(beginthread2(hoge, &Hoge::Proc));
  if (h != 0)
    WaitForSingleObject(h, INFINITE);
}

123 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 18:10:21 ]
AfxBeginThread(boost::bind(&CView::ProcAfter, boost::ref(CView), this);
これでよくね?

124 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 18:50:29 ]
LPSTRからLPCWSTRに変換するにはどうすればいいでしょうか

125 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 19:50:16 ]
>>124
Visual StudioのStandard以上を持っているなら、ATLのCA2Wがお勧め。
無いなら、MultiByteToWideChar使え。

126 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 19:50:41 ]
>>123
AfxBeginThreadって関数オブジェクト引数に取れるのか?

127 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 10:01:57 ]
>>122
難しすぎて誰もわからないに一票

128 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 10:33:23 ]
だいたい なんでメンバ関数に固執するんだろう?
インスタンスをスレッド間で共有する前提でアレコレ クラスカキコしてたら気が狂うんじゃね?

129 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 14:14:09 ]
以下のソースで、読み込んだデータの改行コードが削除されてしまう。
istream_iteratorを使ってるせい?
環境はmingw(gcc 4.3.3)

ifstream fin("data.bin", ios::in | ios::binary);
if (fin.good()) {
  typedef vector<char> Data;
  istream_iterator<char> begin(fin), end;
  shared_ptr<Data> data(new Data(begin, end));
}



130 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 14:15:53 ]
>>129 istreambuf_iterator

131 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 14:19:08 ]
>>130
それだ!どうもありがとう。ペコリ。

132 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 09:23:53 ]
!って人が使ってるの見てはじめて気づいた
すごいいらいらする


133 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 11:02:58 ]
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!! !!!!!!!   !!!!!!!!!!!!!!!! !!!!!!!   !!!!!!!!
!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!! ! !!!!!!     !!!!!!!! ! !!!!!!     !!!!!!
!!! !!!! !!!!!!!!!!!!!!! !!!!!!! !!!! !!!!!!!!!!!!!!! !!!!!!!!
!!!!!!!!!! !!!!!!!!!!!!! !!!!!!!!!!!!!!! !!!!!!!!!!!!! !!!!!!!!!!
!!!!!!!!!! !!!!!!!!!! !!!!!!!!!!!!!!!!!! !!!!!!!!!! !!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
しますか?

134 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 11:44:57 ]
VS2005 C++でWindows Mobileの開発してます(CはDOS以来の初心者です)。
頻繁に呼ばれる文字列処理をする関数内の最初のオート変数として
void hoge(void){
TCHAR szReadBuf[2048];
の様な宣言をしているのですが、この処理を呼んでるループ処理辺りで
[Stack fault] Thread= といった様なエラーがでるので
void hoge(void){
static TCHAR szReadBuf[2048];
ZeroMemory(szReadBuf, sizeof(szReadBuf));
の様に解放されない処理にした所、最初のコード時より幾分か多く回せるようになりました。
そうゆうもんでしょうか?

135 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 11:54:54 ]
>>134
スタック領域は特にモバイルなら大きく取られていないことが多いので、
2048要素の配列で溢れてしまったのでしょう。
後者なら、スタックは消費しないのでその点は大丈夫です。

それはいいとして、ZeroMemory()を呼ぶのが妥当かどうかは検討に値しますが。
# 何故自動変数の時には呼ばないのに静的にしたら呼ぶのか。

136 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 12:36:50 ]
早速ありがとう御座います。
前者はその下でこのようにしてます。
szReadBuf[0]='\0';
後者でもこうすべきですね?
内部の処理が_tcstok等を使って文字列の置換をする処理なので、前回内容が
残ってると紛らわしいのでZeroMemoryしてました。

あと、GlobalAllocでアロケートした変数の再初期化時にZeroMemoryで初期化してますが
ZeroMemoryで無いほうがいいのでしょうか?

137 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 12:45:23 ]
連投すいません
訂正)
× 前回内容が残ってると紛らわしいのでZeroMemoryしてました。
○ デバッグ時に前回内容が残ってると紛らわしいのでZeroMemoryしてました。


138 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 13:16:23 ]
BC++です。
クラスを定義したヘッダファイルとそのメンバ関数を定義したcppファイルを
コンパイルするとUnresolved external '_main'となってしまいます。
一つにまとめて書くしかないのでしょうか?

139 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 14:01:03 ]
「EXE 作る気はないぜオプション」をBCCに渡す。



140 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 14:57:58 ]
-cを付けたらいきました。
ありがとうございます。

141 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 15:50:40 ]
>>136
初期化したくて、可搬性を気にしないなら、ZeroMemory()で医院で内科医?

142 名前:134 mailto:sage [2009/02/21(土) 16:06:00 ]
>>135 >>141
ありがとうございます。
とりあえず、今のレベルはエラー無く動かす事が目標なので、余裕がでたら考えたいと思います。

143 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 16:06:40 ]
memsetだとなんでダメなの?

144 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 16:16:15 ]
C++厨はmemset大嫌いだから

Cプログラマはmemsetが使える場面をいつも血眼で探してるから
C++作法に改宗する時に一番拒むのがここだよな

145 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 16:27:38 ]
memsetいいじゃん
初期化楽だし
俺、C++使っててもメンバを構造体にしてmemsetでやっちゃってるし

146 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 16:35:24 ]
C++厨は全部のメンバを代入文で初期化してんの?

147 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 16:36:31 ]
あ、馬鹿が居る。

148 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 16:36:42 ]
メンバ初期化子に決まってるだろ

149 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 16:49:31 ]
C厨はポインタもmemsetで初期化してんのか?



150 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 16:51:45 ]
>>122
大先生、なんか凄いことしてるみたいだから、一部修正してVC2005でコンパイルしてみたけど、
できないよYo。どうすれば良い?
#include <utility>
#include <memory>
#include <stdio.h>
#include <process.h>
#include <windows.h>
#include <functional>
#include <atlbase.h>

class Hoge {public: UINT Proc() {puts("Hoge::Proc"); return 0;}};
template<typename T>
UINT __stdcall beginthread2_entry(void* p) {
typedef std::pair<T*, UINT (T::*)()> thread_data_t;
thread_data_t* ptd = static_cast<thread_data_t*>(p);
T* px = ptd->first;
std::mem_fun_t<UINT, T> mf(ptd->second);
delete ptd;
return (px->*mf)(); // <======C2297: '->*' : 無効です。右オペランドには型 'std::mem_fun_t<_Result,_Ty>' が指定されています。
}
// To be continued

151 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 16:52:10 ]
template<typename T>
HANDLE beginthread2(T& x, UINT (T::*memFn)(), int priority = THREAD_PRIORITY_NORMAL, UINT stack = 0, DWORD flags = 0, LPSECURITY_ATTRIBUTES lpsa = 0) {
typedef std::pair<T*, UINT (T::*)()> thread_data_t;
std::auto_ptr<thread_data_t> ptd(new thread_data_t(&x, memFn));
uintptr_t ret = _beginthreadex(lpsa, stack, beginthread2_entry<T>, ptd.get(), flags, 0);
if (ret != 0)
ptd.release();
return reinterpret_cast<HANDLE>(ret);
}
int main() {
Hoge hoge;
ATL::CHandle h(beginthread2(hoge, &Hoge::Proc));
if (h != 0)
WaitForSingleObject(h, INFINITE);
}


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]; // こんな感じですか?

253 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 19:06:04 ]
>>251
おんなじ。空白類がいくらあろうと関係ない。

254 名前:デフォルトの名無しさん [2009/03/03(火) 19:47:28 ]
>>252
static unsigned int * ADDR;

全くこのままのコードです。

>>253
ご回答有難う御座いました。
もやもやしていましたが、これですっきりしました。

255 名前:デフォルトの名無しさん [2009/03/04(水) 03:11:45 ]
VC++9の質問です。Unicode環境で
Void Func(LPCSTR pMsg);
みたいな関数があって、ここに文字列を渡すのですが、
Func("xxx");
というように普通に書くと問題ないのですが、
Func(_T("xxx"));
とやると、
const wchar_t[3] から LPCSTRに変換できません、みたいなエラーが出ます。
全ての文字列を_T("") で括ればいいのかと思ってたのですが、違うのでしょうか?


256 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 03:14:42 ]
>>255
_Tで括るのはLPC"T"STRのとき。
LPCSTRはconst char*のtypedefだから_Tは要らない。

257 名前:デフォルトの名無しさん [2009/03/04(水) 03:25:58 ]
>>256
なるほど、ありがとうございました。

258 名前:デフォルトの名無しさん [2009/03/04(水) 13:36:24 ]
初歩的過ぎてすいませんが...

すでに宣言してある配列の配列数を求めて
それと同じ配列数の配列を宣言するには
どうすればいいですか?

よろしくお願いします。

259 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 13:39:38 ]
>>258
配列数はプログラム書いた人しか知らないから無理
それができたら配列のオーバーフロー管理も楽なんだけど




260 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 13:44:40 ]
>>258
状況がよくわからん

261 名前:259 mailto:sage [2009/03/04(水) 13:44:42 ]
sizeof(配列) / sizeof(型)
でいいか
マクロで定義して同じマクロ使うとか


262 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 13:49:06 ]
char a[]={10, 10, 10};
char b[sizeof(a)];
int c[(sizeof(a)-1+sizeof(int))/sizeof(int)]

263 名前:258 mailto:sage [2009/03/04(水) 13:53:28 ]
すいません言葉が足りなすぎました。。

int a[]= {1,2,...};

size=sizeof(a)/sizeof(a[0]);

int b[size];

として同じ配列数の新しい配列を宣言しようとしてもできません。

264 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 13:56:39 ]
C++ なら const int size
Cなら int b[sizeof(a)]

265 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 13:57:14 ]
>>263
size の型は何か

言語をいえ言語を
C か C++どっちだ
あとCならC89かC99なのか

266 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 13:57:33 ]
>>263
コンパイラも

267 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 14:03:12 ]
>>265
C++です。
size の型はintです
>>266
gccです。

268 名前:258 mailto:sage [2009/03/04(水) 14:08:43 ]
const int size = sizeof(a)/sizeof(a[0]);

int b[size];

として宣言できました。

ありがとうございました。

269 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 15:03:27 ]
配列の要素に変数が使える規格って無かったっけ




270 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 15:30:51 ]
>>269
C99だろ

271 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 17:19:24 ]
連立方程式のを渡したら戻ってくる関数ってありますか?

272 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 17:20:51 ]
>>271
標準にはない
標準じゃなくていいならある

273 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 09:53:35 ]
assert()と_ASSERT()ってなにか違いがあるのでしょうか?

274 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 10:11:11 ]
assertはC/C++標準
結果としてabort()
_ASSERTはVC++独自
_CrtSetReportMode等で動作の調整が可能

275 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 18:14:15 ]
メンバ関数のポインタの宣言はCxxx::*funcなのに
取得はCxxx::&funcでなく&Cxxx::funcなの?
&がなんで宣言の時の*の位置より移動するの?

276 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 18:40:47 ]
>>275
発想としては、Cxxx::という修飾が
メンバへのポインタ型では*にかかっていて、
メンバへのポインタを得るときには、メンバ名funcにかかっている
ということのようだ。

277 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 18:51:32 ]
俺としては逆なんだが
なんでCxxx::&funcなの?
どこのクラスのメンバ関数のアドレスか分からんが

278 名前:デフォルトの名無しさん [2009/03/05(木) 20:41:28 ]
大変だー
さっぱりわからん

279 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 20:43:44 ]
>>278
何が分からないんだかさっぱり分からないぞ



280 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 20:44:43 ]
>>275
単に文法的な曖昧さを除いた結果そうなっただけ。

class A {
public:
 static void (*A::func)();
};

としてしまうと、static メンバ変数の実体定義がこうなってしまう。

void (*A::A::func)();

どっちがどっちの A:: やら分からん。

281 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 21:16:46 ]
もうクラスのメンバ関数のポインタは無しで

282 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 22:09:09 ]
9割くらいBoostやTR1のbind(暗黙のmem_fun)と一緒にしか使わない。

283 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 22:41:19 ]
delegate パターンで使うね

284 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 01:31:13 ]
じゃあdeleteパターンで

285 名前:276 mailto:sage [2009/03/06(金) 19:49:52 ]
>>276, >>280
すみません、レス読んでも、それが
取得はCxxx::&funcでなく&Cxxx::funcなの?
の回答になるのか、さっぱり理解できないですが><

あと、&Cxxx::funcは&(Cxxx::func)としては良くないと本に書いてあるんですが
なんで良くないんですか?

286 名前:デフォルトの名無しさん [2009/03/06(金) 20:12:15 ]
なんか抽象クラスをインスタンス化できないらしいのですがどうすればいいですか?
派生クラスは無いのですが
その派生クラスの無い抽象クラスが型な引数をとる関数を使いたいのですが初期化?の方法がわかりません

287 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 20:16:31 ]
>>286
まずは、その抽象クラスへのポインタ型か参照型を引数にしている?

288 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 20:24:22 ]
>>287
ポインタ型を宣言してます、いろいろ上手くいかなかったのでポインタで宣言、元の抽象型で宣言、アドレスをポインタ型に代入→引数に
としてます、エラーメッセージはメンバが抽象型です、宣言を確認してください、です

289 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 20:27:48 ]
>>286
派生クラスがない、ではなく、派生クラスは自分で作れということでは?



290 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 20:29:59 ]
ああ、そうかもしれない

291 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 20:43:25 ]
"派生クラスの無い抽象クラスが型な引数をとる関数"
これ、抽象クラスのインターフェイスを使って新しいクラスを作れということ

292 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 20:56:18 ]
覚えておきます、ありがとうございました






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<69KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef