[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/29 13:41 / Filesize : 252 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

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



1 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 15:14:51 ]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.46【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1198755167/
【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

83 名前:コンパイルできた [2008/01/17(木) 15:48:54 ]
<82の続きです>
ちなみにstring2int()は以下のように定義しました。
class string2int : public unary_function<string,int> {
public:
unary_function<string,int>::result_type operator() (unary_function<string,int>::argument_type str) {
if (str == "-")return 0;
else return static_cast<int>(atoi(str.c_str()));
}
};

いやー、すげえ感謝感謝。今回答えてくれた方々には昼飯一回おごってもいいくらいス。


84 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 15:57:07 ]
昼飯一回程度の感謝

85 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 16:04:00 ]
>>83
もうちょっと本買って読んだ方がいいな

86 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 16:04:23 ]
名無しの書き込みから個人を特定して昼飯をおごる程の感謝
えらく大変だな


87 名前:76 mailto:sage [2008/01/17(木) 17:44:29 ]
>>83
昼飯はいいから俺がニート脱出できるように神様にお願いしといてください。

88 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:00:30 ]
#include <iostream>
#include <cstdio>

char ch[10];

int main()
{
while ((cin.getlie(char, 10)) != EOF) {

}
}


これをコンパイルしようとするとwhileの行でエラーが出るのですが、
何がいけないのでしょうか??

89 名前:88 mailto:sage [2008/01/17(木) 20:02:08 ]
すいませんwhileの行のcharはchの間違いです。

90 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:03:38 ]
>>88
余分なものが付いているk 「ar」 a

91 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:04:32 ]
getlie



92 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:04:36 ]
getlie ではなくて getline な。
分かってるとは思うけど

93 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:04:38 ]
>>88
std:: n が足りない

94 名前:88 mailto:sage [2008/01/17(木) 20:12:05 ]
回答くださった方ありがとうございます。
すいません色々抜けていました。。orz
正しくはこれです。

#include <iostream>
#include <cstdio>
using namespace std;

char ch[10];

int main()
{
while ((cin.getline(ch, 8)) != EOF) {

cout << "test";
}
}


これでもコンパイルできないのです。
whileの行でエラー出ます。



95 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:14:35 ]
>>94
!= EOFこれが不要。
質問するときはエラーの内容も書いてくれ。

96 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:14:54 ]
>>94

#include <iostream>

char ch[10];

int main()
{
 while (std::cin.getline(ch, 8)) {
  std::cout << "test";
 }
}

97 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:35:00 ]
#include <iostream>

int main()
{
  char ch[10];
  while (std::cin.getline(ch, sizeof ch)) {
    std::cout << "test";
  }
}


98 名前:デフォルトの名無しさん [2008/01/17(木) 21:21:43 ]
Fedora6 gcc
でファイルの更新を検知するプログラムを作りたいのですが、
更新までブロックする関数を教えてください。

if (ファイルの更新までブロック)
{
//更新された
read();
...
}
みたいなカンジです。

ちなみにtailのソースを見てみたのですが、
1秒毎にファイルが更新されたかチェックして処理をしているようです。

何秒毎にチェックするのではなく、更新までブロックできる関数がわかればいいです。

よろしくお願いします。

99 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 21:29:34 ]
なんでそんなものが存在するという前提で物事を進めようとするの?

100 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 21:38:03 ]
てゆーかチェックせずに、更新されると発見してほしいのかよwwwwwwwww

101 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 21:42:18 ]
Windows だとディレクトリの更新を検知してシグナル送ってくれる
FindFirstChangeNotification/FindNextChangeNotification って API があるから
他の OS でもそういう API があるんじゃないかと思う気持ちも分からんでも無い。



102 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 21:53:22 ]
>>98
Linuxなら可能。
dnotify inotify といったキーワードで調べてみて。


103 名前:デフォルトの名無しさん [2008/01/17(木) 22:30:53 ]
プログラムって教科で分けると数学ということですか?

104 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 22:35:11 ]
>>103
いや、国語だろ

105 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 22:38:31 ]
普通に、技術家庭科。
実際、技術家庭科の時間にVBプログラミングやらされてたし。

106 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 22:39:31 ]
情報だろ

107 名前:デフォルトの名無しさん [2008/01/17(木) 22:45:09 ]
統一された見解が無いということですか?
哲学っぽいですね。

108 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 22:47:06 ]
分野でいうと情報処理だろうな。
つか、いちいちageんなって。

109 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 22:51:45 ]
>>99
Winだと
tp://www.google.co.jp/search?hl=ja&q=ReadDirectoryChangesW&lr=
みたいな感じで、存在するんだよ。だから、98もそこから、Linuxにも存在すると期待してるんじゃないかな……
ちなみに、俺は知らん。

110 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 23:01:49 ]
高専だと、情報基礎以外に、制御とか計算機科学、電子、通信、ソフ技、ハード技、プロ技
至る所でプログラミング漬けだったけど。時代遅れのw

111 名前:デフォルトの名無しさん [2008/01/17(木) 23:02:50 ]
>>102
具体的にありがとうございます。
手詰まりだったので、大変助かりました。
ありがとうございました。

>>100
何が言いたいのか分かりません。



112 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 23:15:41 ]
>>110
そういえば親戚に情報基礎の教科書見せてもらったら15年前と大差なくてワロタ

113 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 23:17:49 ]
15年前って言うと、数学の教科書の後ろの方に載ってる、
実際には授業で何にも使われない BASIC のことか?

114 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 23:20:48 ]
基礎は不滅です。

115 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 23:23:16 ]
流動的なものは情報Aなんかに任せとけば良いよ。

116 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 23:30:52 ]
>>113
入力・出力・制御・演算・記憶
FFの応用回路・BASIC・CASL
のあたり。

117 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 23:46:44 ]
ああ、高専の教科書か。
それは・・・知らんから何とも言えん。

118 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 23:51:09 ]
情報関係の教科書書いてる教授がwinの基本操作とかCDの焼き方きいてくるからね〜(実話

119 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 23:52:34 ]
VC++にtypeof()みたいのはないですか?

120 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 23:56:19 ]
BOOST_TYPEOF

121 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 23:56:28 ]
標準C++的にはtypeid演算子

あとMFCがなんか持っていた気がする。
C++/CLIなら当然.NET Frameworkのリフレクションが色々使える。



122 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 00:12:51 ]
#define foreach(t, o, i) for(t::iterator (i)=(o).begin();(i)!=(o).end();++(i))
な感じのマクロの場合、それを使うと方を渡さなくて良くなりますか?

123 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 00:15:49 ]
そんなマクロを作るな。
制御文をマクロ化すると
自分以外に読みづらいので
悪い作法だと言われている。

124 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 00:24:10 ]
Cの文法で基本的な事かもしれないのですが、Linux のカーネルソースを読もうとして
挫折してしまったんですが、例えば
struct hw_pci mr300_pci __initdata = {
.nr_controllers = 1,
.preinit = mr300_pci_preinit,
.swizzle = pci_std_swizzle,
.setup = ixp4xx_setup,
.scan = ixp4xx_scan_bus,
.map_irq = mr300_map_irq,
};
のような struct 宣言が書いてありましたが、
.(dot)var = 値 のような記法って、そのメンバーの初期化という意味になるのでしょうか?
手元のCの文法書に見つからなかったのですが、この記述の説明文献ってありますかね?


125 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 00:25:09 ]
C99 から導入された文法。
そのメンバの初期化という意味でおk。

126 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 00:26:17 ]
C99 はここに簡単にまとめられてる。
seclan.dll.jp/c99d/

127 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 00:31:36 ]
>>125-126 ありがとうございました。逝ってみます。

128 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 00:34:13 ]
>>123
便利って書いてあるよ。
www.jah.ne.jp/~naoyuki/Writings/STL.html

129 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 00:41:39 ]
>>122
BOOST_FOREACH

130 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 00:54:48 ]
>>129
むり

131 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 01:05:40 ]
122はコンテナの型、BOOST_FOREACHは要素の型を渡す必要がある点では、どっちもどっち。



132 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 01:12:38 ]
長いのよ

133 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 01:41:49 ]
適当にマクロで短い名前を付ければいいだろ。

134 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 03:06:16 ]
VC++2005、WinXPです。

チェックボックスつきのツリーコントロールを作りたいと考えています。
チェックボックスでは三つのチェック状態をあらわしたいと思っておりまして、
ちょうど、VCをカスタムインストールする時に出てくるチェック付きツリーコントロールのような物を考えております。

これを実現する簡単なAPIないし、クラスはないでしょうか?

135 名前:デフォルトの名無しさん [2008/01/18(金) 04:20:09 ]
xcode環境でc++を開発している人はいますか?
emacsよりもイイですか?


136 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 04:45:13 ]
>>135
そもそもIDEとエディタを単純比較するのが間違ってる気がするよ!
気持ちは分かるけど・・・・・・

137 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 05:43:59 ]
newでメモリを確保してdeleteをせずプログラムを終了した場合ってそのまま
ずっとメモリ確保されたままになるの?

138 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 05:45:44 ]
cout
って何の略なんですか?

139 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 05:46:08 ]
大抵はOSが何とかしてくれる

140 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 05:46:38 ]
>>138
console out

141 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 06:06:10 ]
>>139
ありがとう
再起動するまでずっと無駄に領域とられたままかと思ってたけどOSがどうにかしてるのね



142 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 07:08:07 ]
>>138
console output

143 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 07:08:37 ]
極めて古い OS だと分からんけどね。

144 名前:デフォルトの名無しさん [2008/01/18(金) 11:36:39 ]
>>136
emacs が好きなんですが、
class-name.<Tab>とか押すと、method-nameが選択できたり、
method一覧がかんたんに見れたり,そういう環境が羨ましい。

145 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 11:49:43 ]
VB6、.NET言語のインテリセンスに比べればどうということはない。

146 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 11:51:24 ]
インテリセンスは正直凄いと思う。

147 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 11:54:04 ]
VCのは御馬鹿

148 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 12:20:50 ]
eclipseとかもVC#のインテリセンス真似してくれればいいのにな

149 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 12:26:53 ]
糞lipseは重くて嫌いだ。

150 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 16:57:49 ]
最近のVSはC#だけインテリセンスがよく効く
C++はおざなりってか

151 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 17:35:44 ]
C++は複雑すぎるからな



152 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 18:59:29 ]
てゆーか昔から

153 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 19:04:38 ]
プリプロセッサ,テンプレート,ポインタの
置き換え,マッチング,追跡の大変さを考えたら,
今の IntelliSense ってすげぇとおもうが.

154 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 19:06:52 ]
VB.NETとC#はおなじじゃない?

155 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 19:10:49 ]
MessageBoxの上にカーソルのせたら
WMessageBoxWにマクロで置換されてると教えてくれるけど。
肝心の引数がプロトタイプが見えないとか。

156 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 19:11:35 ]
MessageBoxW

157 名前:デフォルトの名無しさん [2008/01/18(金) 19:25:42 ]
確かに引数のプロトタイプが見えないのは面倒だね
たいてい関数の末尾にA、W付ければ良いって話だけど

158 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 22:36:51 ]
VS使ってるなら、「(」書いたときにプロトタイプ出て来ないっけ?
まぁ書いてるときじゃなくて見てるだけのときは面倒かもだけど

159 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 22:40:28 ]
>>134
お願いします。

160 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 23:19:55 ]
public:
template <class T> class templateA {
protected:
T value;
public:
各種メソッド
};

template <class T> class templateB {
protected:
T value;
public:
各種メソッド
}

class child : templateA<templateB<type> >{
追加メソッド
}

以上のようなクラスを作成し、
子クラス内でthis->value.valueでテンプレートクラスB内の値にアクセスしようとしたのですが、protectedの要素にアクセスできないというエラーが出ます。
どこを直せばよいのか分かりません。
どなたかご教示下さい。
宜しくお願いします。

161 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 23:30:06 ]
templateBのvalueをpublicにすれば良い
childはtemplateBを継承してないんだからtemplateBのprotectedメンバにはアクセスできない



162 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 23:31:45 ]
安易にpublicにしていいのだろうか。

163 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 23:47:24 ]
なら安易にアクセスすんなよw

164 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:05:00 ]
public にするくらいなら friend にするわ。
でも、設計をもうちょっと考える事をまず検討した方がいい気がする。

165 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:45:04 ]
>>161-164様、ありがとうございます。
それぞれのテンプレートクラスにgetメソッドを追加して、要素にアクセスできるようにしてみました。
あまり綺麗な方法とは思いませんが、ひとまずこれで妥協しておきます。
C++初学者なので、friend関数の存在は知っていますが、使った事がないので、こちらも少し勉強してみようと思います。
オブジェクト指向が少しずつ理解できるようになってきて、数ヶ月前に作ったクラスのリファインが楽しすぎて困ります。
お陰で研究が全然進まないYO...

166 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:47:56 ]
おすすめ   設計見直し > get > friend > public   おすすめしない

って順かな。

167 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:51:39 ]
friendもpublicも大差ない気がするけどな
研究とかならいっそstructでもいい気がする

168 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:57:23 ]
一応公開する相手が制限されてる分、public よりマシだとは思うが、
決しておすすめはできないという点では確かに似たようなもんだな。

169 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 01:01:32 ]
>>166
getは○〜△というところでしょうか。
一応意図したものにはなったので、取りあえずこれで行ってみます。

>>167
この先数年使う可能性があるので、ある程度しっかりしたものが作っておきたかったのです。
最悪の場合、お上に献上しないといけないものなのでw
リファイン前は各変数毎にgetメソッドとsetメソッドを用意していました。
これではあまりにも酷いと思いまして。

>>168
難しいですね。
自分の知識がついてきたら、またリファインすると思います。
そして無限ループへ…

170 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 01:08:37 ]
作る前に設計をよく練った方がよさそうな・・・
設計に関する知識が無いならC++なんかやってないでそっちの勉強すべきだし

171 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 01:32:23 ]
#include <stdio.h>
class A{
public:
virtual void func(){printf("A::func¥n");};
};

class B :public A{
private:
virtual void func() {printf("B::func¥n");}
};

int main (void)
{
A* b = new B;
b->func(); //B::funcと出力される。privateなのにアクセスできる!?
}

上記のコードについて、ご教授をお願いします。
gcc4.01で試したところコンパイルすることができました。
B::func()はprivateなのになぜコンパイルエラーにならないのでしょうか?






172 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 01:33:38 ]
A::funcがpublicだから

173 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 01:53:13 ]
>>171
class A の 仮想関数テーブルには
void func(){printf("A::func\n");}
の関数アドレスが配列0番に登録されている。
また、class B の 仮想関数テーブルには
void func(){printf("B::func\n");}
の関数アドレスが同じく配列0番に登録されている。

コンパイル時には静的な型であるAのfunc()が
調べられ、publicゆえにアクセスできることが
確認される。同時に仮想関数ゆえ、func()は
意味的には以下のようにコンパイルされる。

(b->vptr[0])(this);

vptrは仮想関数テーブルへのポインタで、今の
場合、派生クラスBの仮想関数テーブルのアドレス
が格納されている。仮想関数の呼び出しでは
コンパイル時はあくまで静的な型でアクセス可能性
が決定されるのがポイント。

と思う。

174 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 01:56:50 ]
>>171
こういうコードだと分かりやすいと思う。
B の実装なんて知ったこっちゃないのよ。

// a.h
#include <stdio.h>
class A{
public:
virtual void func(){printf("A::func\n");};
};

// b.h
#include "a.h"
A* get_b();

// test1.cpp
#include "a.h"

int main (void)
{
A* a = get_b();
a->func();
}

// b.cpp


175 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 01:57:24 ]
間違えた。こうだ。

// test1.cpp
#include "b.h"

int main (void)
{
A* a = get_b();
a->func();
}

176 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 02:04:01 ]
一般的なコンパイラの実装の仮想関数呼び出し
メカニズムで理解しておいたほうがいいんじゃね?
静的な型でアクセス可能性が決まるというのが
真実だと思うが。

177 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 02:15:42 ]
>>171-176 さん、ありがとうございました。
Final Draft IS に、そのまんまの答えがありました。
www.kuzbass.ru/docs/isocpp/access.html#class.access.virt

>静的な型でアクセス可能性が決まるというのが
>真実だと思うが。
そういうことになりますね。


178 名前:デフォルトの名無しさん [2008/01/19(土) 04:15:38 ]
typedef{
int x,y;
}data;
・・・
hogehoge(std::vector<data>dist);

こんな使い方はできるんでしょうか?
また、こんな使い方はトリッキーなんでしょうか?

179 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 04:22:37 ]
>>178
vectorにユーザー型を入れれるのか?
ということであれば、普通に使えます。
その書式はおかしいけどな

180 名前:デフォルトの名無しさん [2008/01/19(土) 04:33:56 ]
>>178
structかclassつけーや

181 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 09:07:21 ]
struct a { ... };
typedef t_a { ... } a;

C++コード上で下の利点ってどういったものがありますか?



182 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 09:12:45 ]
>>181
C でも使えるコードを書くのでなければ特に何の意味もない。

183 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 09:21:06 ]
d






[ 続きを読む ] / [ 携帯版 ]

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

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