【初心者歓迎】C/C++室 Ver.53【環境依存OK】at TECH
【初心者歓迎】C/C++室 Ver.53【環境依存OK】 - 暇つぶし2ch1:デフォルトの名無しさん
08/04/24 07:23:05
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.59【環境依存OK】(実質Ver.52)
スレリンク(tech板)
【アップローダー】(質問が長い時はココ使うと便利)
URLリンク(kansai2channeler.hp.infoseek.co.jp)

2:デフォルトの名無しさん
08/04/24 07:24:43
【過去ログ】

【初心者歓迎】C/C++室 Ver.48【環境依存OK】
スレリンク(tech板)
【初心者歓迎】C/C++室 Ver.49【環境依存OK】
スレリンク(tech板)
【初心者歓迎】C/C++室 Ver.50【環境依存OK】
スレリンク(tech板)
【初心者歓迎】C/C++室 Ver.51【環境依存OK】
スレリンク(tech板)
【初心者歓迎】C/C++室 Ver.50【環境依存OK】
スレリンク(tech板)
【初心者歓迎】C/C++室 Ver.59【環境依存OK】
スレリンク(tech板)

3:デフォルトの名無しさん
08/04/24 07:46:05
3

4:デフォルトの名無しさん
08/04/24 07:53:38
'1'はCだとintだけどC++だとcharなんだよね。
オーバーロードの関係でそうしたのかな。

5:デフォルトの名無しさん
08/04/24 10:43:42
前回59にしてしまったものです。53で立ててくれてありがとう。


6:デフォルトの名無しさん
08/04/24 12:51:25
>>4
簡単に言えばそういうことだ。
「std::cout << '\n';」で「10」とか印字されても困るだろ。

7:デフォルトの名無しさん
08/04/24 17:10:31
C++のtry~catchって
メソッドの中で入れ子になっていても問題ないですか?

void CHoge::Method()
{
try{
// 処理1
try{
// 処理2
}
catch(...){
// 処理2の例外処理
}
// 処理3
}
catch(...){
// 処理1、3の例外処理
}
}

みたいな感じです

8:デフォルトの名無しさん
08/04/24 17:12:47
問題ない

9:デフォルトの名無しさん
08/04/24 17:13:54
ちなみに、C++ではメソッドじゃなくてメンバ関数という
あと、

void func() try {
} catch (...) {
}

なんて書き方もOK

10:7
08/04/24 17:18:39
>>8-9
素早い回答ありがとうございました

11:デフォルトの名無しさん
08/04/24 18:17:01
virtual int sample() const; みたいな関数のプロトタイプ宣言があったのですが、なぜこの位置にconstがあるのでしょうか??
またこのような感じの関数はどういった呼び出し方をすればよいのでしょうか。
どなたか教えていただけると幸いです。


12:デフォルトの名無しさん
08/04/24 18:21:01
後ろに付いてるconstはその関数が
(メンバ)変数を書き換えないという指定

13:デフォルトの名無しさん
08/04/24 18:26:24
template <template<class> class T>
このようなテンプレートテンプレートパラメータが
なぜこんな書き方ができるのか今一理解できません。
どこか詳しく解説してるとこはないものでしょうか?

14:デフォルトの名無しさん
08/04/24 19:35:22
すいません、教えてください。

--- ヘッダ ----
typedef struct _STRUCT1{
long code;
CArray<long, long> data;
}STRUCT1;


CArray<STRUCT1, STRUCT1&> code_data;

--- ソース ----
STRUCT1 st;
st.code = 1;
st.data.Add(100);
code_data.Add(st);


みたいな感じでやると、最後の行でコンパイルエラーになるんですが
CArrayの中にCArrayを含む構造ってダメなんでしょうか?

途中までいい気でコーディングして、最後にエラー出てしまって
途方にくれています。
今更ほかの方法で似たような事やるのは大変で・・・。
よい方法ないでしょうか。


15:デフォルトの名無しさん
08/04/24 19:38:36
bool型のa[3]

a[0] = 0; a[1] = 0; a[2] = 0;
a[0] = 1; a[1] = 0; a[2] = 0;
a[0] = 0; a[1] = 1; a[2] = 0;
a[0] = 0; a[1] = 0; a[2] = 1;
a[0] = 1; a[1] = 1; a[2] = 0;
a[0] = 1; a[1] = 0; a[2] = 1;
a[0] = 0; a[1] = 1; a[2] = 1;
a[0] = 1; a[1] = 1; a[2] = 1;
行と行の間には何かしらの処理が入る。
これをfor文でまとめて書くにはにはどうすればいい?

16:デフォルトの名無しさん
08/04/24 19:50:47
0..7で回すのはダメなのかな・・・と思ったけど順番が微妙に違うのか?

17:デフォルトの名無しさん
08/04/24 19:56:28
綺麗なのが思いつかん
くやしいわ

18:デフォルトの名無しさん
08/04/24 19:57:02
>>14
STRUCT1 st;
STRUCT1 st2 = st;
st2 = st;
の3行を書いて、コンパイル通る?

あとコンパイルエラーのメッセージは?

19:デフォルトの名無しさん
08/04/24 20:08:11
>>14
for( int i = 0; i < 7; i++ ) {
a[0]=(0xb2>>i)&1;a[1]=(0xd4>>i)&1:a[2]=(0xe8>>i)&1;

20:デフォルトの名無しさん
08/04/24 20:09:31
もとい>>15です

21:デフォルトの名無しさん
08/04/24 20:10:06
std::bitset<32> bits(0x76534210UL);
for (int i=0; i < 8; ++i)
 std::cout << bits[i * 4] << ", " << bits[i * 4 + 1] << ", " << bits[i * 4 + 2] << "\n";

22:デフォルトの名無しさん
08/04/24 20:10:52
i<8だったorz

23:デフォルトの名無しさん
08/04/24 20:15:16
for( int i = 0 ; i < 7 ; ++i )
{
 const m = 076534210 ;
 bool a[] = { ((m>>(i+0))& )!=0 ,((m>>(i+1))&1)!=0 ,((m>>(i+2))&1)!= 0} ;
 なにかしらの処理
}
うーん、いまいち

24:デフォルトの名無しさん
08/04/24 20:17:41
多重ループで挑戦してるけど・・・
綺麗なのできねぇかなぁ

25:デフォルトの名無しさん
08/04/24 20:19:31
076534210 の 3 と 4 をきれいに入れ替えられたら勝利。

26:デフォルトの名無しさん
08/04/24 20:23:23
素直にやるなら

#define NELEMS(array) (sizeof (array) / sizeof (array)[0])
#define GET_BIT(n, b) ((n) & (1u << (b)))

static const unsigned int flags[] = { 0, 1, 2, 4, 3, 5, 6, 7 };
for (int i = 0; i < NELEMS(flags); i++) {
 GET_BIT(flags[i], 0) と
 GET_BIT(flags[i], 1) と
 GET_BIT(flags[i], 2) を使う
}

27:デフォルトの名無しさん
08/04/24 20:27:54
配列 a[] を四つに拡張したい場合どうするかでも書き方をどうするか変えたくなるな
結構頭の体操としては面白い

28:デフォルトの名無しさん
08/04/24 20:28:05
どこが素直なんだよw

29:デフォルトの名無しさん
08/04/24 20:30:11
長いパスにアクセスするにはどうしたらいいですか?
たとえばファイルオープンするときなどです。

30:デフォルトの名無しさん
08/04/24 20:31:52
長いパスにアクセスすればいい

31:15
08/04/24 20:32:32
皆さん考えていただいてありがとうございます。
今回はなんとかできました。

ヒントをいただいたので配列の長さがNの時も考えようと思います


32:デフォルトの名無しさん
08/04/24 20:40:15
一般化するなら再帰使うといいよ。再帰。

33:デフォルトの名無しさん
08/04/24 20:40:34
255文字以上のアクセスできない場合にアクセスする方法ってありますか?

34:デフォルトの名無しさん
08/04/24 20:42:57
Unicode 版の CreateFile を使って、
パスの前に "\\\\\?\\" を付けるといいらしいが、
実際にやってみると出来ないと聞いたこともある。

35:デフォルトの名無しさん
08/04/24 20:45:50
トン!

36:デフォルトの名無しさん
08/04/24 20:48:52
オフラインで使える C と C++ のリファレンスって何か良いのありますか?

37:デフォルトの名無しさん
08/04/24 20:49:52
VC6 の MSDN

38:デフォルトの名無しさん
08/04/24 20:55:01
URLリンク(cppreference.com)
URLリンク(www.cppll.jp)

39:デフォルトの名無しさん
08/04/24 21:03:17
なんだかんだ言ってMSDNが一番纏まってて読みやすいんだよな…
しかし最近のはwebも新形式ヘルプも重い罠

40:デフォルトの名無しさん
08/04/24 21:08:29
>>36
古めの C/C++ のドラフトとか。英語だけど。

41:デフォルトの名無しさん
08/04/24 21:28:34
>>34
すみません 100文字は出来ますが300文字だと無理になります
どうすればいいですか?

#include <windows.h>

int main(){
int r; wchar_t e[1000]=L"\\\\\?\\c:\\";

//100文字のディレクトリを生成してみる
fore(r,100)e[r+7]=L'a'; e[7+r]=L'\\'; e[8+r]=0;
CreateDirectoryW(e,NULL);

//300文字のディレクトリを生成してみる
fore(r,300)e[r+7]=L'b'; e[7+r]=L'\\'; e[8+r]=0;
CreateDirectoryW(e,NULL);
}

42:デフォルトの名無しさん
08/04/24 21:32:49
Windowsでは生成は出来ないけれど、別の環境で作成されたパスにアクセスはできるという事ですか?

43:デフォルトの名無しさん
08/04/24 21:34:42
確かディレクトリ名やファイル名はMAX_PATHまでだったと思う。
でフルパスの時32767まで。

44:デフォルトの名無しさん
08/04/24 21:37:09
>>43
トン 実験してみます

45:デフォルトの名無しさん
08/04/24 21:55:42
>>43
トン できました!

int main(){
int r;
wchar_t g[1000]=L"\\\\\?\\c:\\",h[]=L"aaaaaaaaaa\\";
for(r=0;r<30;r++){wcscat(g,h); CreateDirectoryW(g,NULL);}
wcscat(g,L"bbbbb\\"); CreateDirectoryW(g,NULL);
}


46:デフォルトの名無しさん
08/04/24 22:48:31
初めてのプログラミングでCをやるのですがお勧めの参考書があったら教えてください

47:46
08/04/24 22:52:57
しまった、age
ちなみにVC使う予定です

48:デフォルトの名無しさん
08/04/24 22:59:34
CなのかC++なのかMFC使うのかWIN32APIなのかなど、
どういう使い方をしたいのかで変わってくると思う。

49:デフォルトの名無しさん
08/04/24 23:01:53
それすらチンプンカンプンなのでもう少し調べてみます

50:デフォルトの名無しさん
08/04/24 23:19:42
何でやるのか書いた方が良いよ。
学校の勉強か、趣味か、仕事か、作りたいものでも有るのか、他。

それと基礎知識。
多言語の経験有るとか、プログラミング初心者とか。

51:デフォルトの名無しさん
08/04/24 23:37:03
VCでCの勉強するって書いてあるから
[やさしいC]あたりでいいんじゃないでしょうか?

個人的意見ですけど最初はIDE(VC等の統合開発環境)使わずに
コンパイラだけ用意して勉強したほうがいいかと。

52:デフォルトの名無しさん
08/04/24 23:53:04
仕事ですね
アプリ系らしいけども
プログラミング自体初心者なので何から始めたらいいやらで

53:デフォルトの名無しさん
08/04/24 23:56:43
職場の先輩にでも聞いた方がいいと思うけど

54:デフォルトの名無しさん
08/04/25 00:03:35
初心者なら windows なんてやめて UNIX系で慣れろ

使いもんにならんwindows 育ちなど

55:デフォルトの名無しさん
08/04/25 00:04:38
Windows プログラミングするなら
それでも Windows で慣れてないと困るけどな。
ただ、Web 系するだけなら別に Windows である必要は無いな。

56:デフォルトの名無しさん
08/04/25 00:05:41
>>52
仕事(実務がてらの教育な気もするけど)なら、最短経路ってことで、
プラットホーム(LinuxとかWindowsとか)と、
本当にCなのか、それともC++でもいいのか聞いた方がいい。

57:デフォルトの名無しさん
08/04/25 00:07:49
>>54
概ね同意だけど、一つのプラットホームしか知らない奴も結構使えない。

58:デフォルトの名無しさん
08/04/25 00:32:33
メンバ関数のポインタのとり方教えてください。
コメントの部分でエラーになってしまいます……。

class ca {
public:
int (*pa)();
int nasi(void);
ca(void);
}ca1;
int ca::nasi(void){return 0;}
ca::ca(void) {pa = nasi;} //コンパイルエラー

59:デフォルトの名無しさん
08/04/25 00:36:20
>>58
URLリンク(www.google.com)

60:11
08/04/25 00:36:57
>>12 さん
なるほど。ありがとうございます!

61:デフォルトの名無しさん
08/04/25 00:42:52
void

62:58
08/04/25 00:51:53
>>59
ありがとうございます。おかげでできました。
これからはもう少し自分でも調べるようにします。

class ca {
public:
int (ca::*pa)();
int nasi(void);
ca(void);
}ca1;
int ca::nasi(void){return 0;}
ca::ca(void) {pa = &ca::nasi;}

63:デフォルトの名無しさん
08/04/25 02:53:11
>>13
亀レスですまんけど、何故そういう書き方ができるか、というより
そういう書き方をする意味ならある。
確かそのようにニ重にテンプレート指定すると、
template <template <class> class T> class hoge{};
とした場合に、hogeのインスタンスを宣言するときに
hoge< fuga<monyu> > Hoge;
ではなく
hoge<fuga> Hoge;
で済むというメリットがあったと思う。
fugaもテンプレートクラスであるにも関わらず、fugaのテンプレート引数は
指定しなくていい(ただしデメリットもあったと思うけど)。
あまり覚えてないので大して助言できなくてスマン。

64:デフォルトの名無しさん
08/04/25 04:14:34
補足。確か、そのような二重のテンプレートの場合
hogeクラスがmonyuの型を要求するような実体化を伴う場合、
(hogeクラスからfugaクラスのメンバ関数を呼ぶ場合でも。中でmonyuの型が必要なら)
実体化に失敗するんだったと思う。
その代わり、hogeクラスはfugaクラスのテンプレート引数に自由に型を
指定して利用することが出来る(もちろん文法が通る場合に限るが)。

65:デフォルトの名無しさん
08/04/25 05:06:36
>>63,64
詳しい説明感謝です。
他スレでも聞いてしまってましたが、
そっちとはまた違った説明で、おかげで
かなり納得できました。

66:デフォルトの名無しさん
08/04/25 05:15:30
>>65
すまん、そっちの説明どんなだったか教えて欲しいかもw
あんま使ったことない用法だから自信ないので・・

67:デフォルトの名無しさん
08/04/25 05:22:13
ダイアログ1のOnInitDialogにダイアログ2を1の子としてCreate、ShowWindowするコードを追加したいのですが、ダイアログ2の変数の作り方がわかりません。
ダイアログ1のヘッダーに paintDlg2 m_dlgPaint; を記述しても

';' が、識別子 'm_dlgPaint' の前に必要です。

というコンパイルエラーがでます。
インクルードの順序は確認したのですがうまくいきません。
2008で自動で変数追加しようとしても変数の種類が選べなくてよくわからないんです。

68:デフォルトの名無しさん
08/04/25 06:17:50
>>66
これですわ
スレリンク(tech板:667番)

69:デフォルトの名無しさん
08/04/25 06:25:20
しかし
template <template <class> class T>
これ、関数ポインタと同じ様な書式で
template <class T<class> >
と書くほうが自然な感じがするのは自分だけ?

70:デフォルトの名無しさん
08/04/25 06:49:43
>>68
thx。
しかし色んな書き方できるんだなぁ・・・


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch