- 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
- 72 名前:デフォルトの名無しさん [2008/01/17(木) 13:41:27 ]
- >>70のつづき
もうなんだかわけがわからなくなってきた。 unary_functionはArgとResのtypedefなんですか? STLのコンパイルエラーメッセージはやくにたたん。
- 73 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 13:53:51 ]
- 普通std::unary_functionは継承して使わないと役に立たないと思うんだが。
- 74 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 14:14:06 ]
- >>72
そもそもunary_functionを引数にしようとした理由は? 普通継承したファンクタ作るよね
- 75 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 14:17:44 ]
- std::unary_functionやstd::binary_functionを継承する理由は
std::bind2ndなどのアダプタがargument_typeとresult_typeを 必要とするから。 それ以上の意味はない。別にstd::unary_functionを継承しなくても 自分でargument_typeとresult_typeをtypedefしてもいい。
- 76 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 14:33:29 ]
- こんな感じか?
template <typename T> vector<int> line2vec2(string line, char delim, T func) { transform(v.begin(), v.end(), v2.begin(), func()); } line2vec2( , , std::ptr_fun(関数ポインタ)); line2vec2( , , 関数オブジェクト());
- 77 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 14:35:18 ]
- 間違えた
>transform(v.begin(), v.end(), v2.begin(), func()); transform(v.begin(), v.end(), v2.begin(), func);こうだな
- 78 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 15:04:35 ]
- >>76-77
>>42-43
- 79 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 15:06:07 ]
- >>72
今回のエラーメッセージは割と理解できるものだし、 そもそも何が駄目なのか指摘されてるのに まるで見当違いの方法を試しているのはお前自身だ
- 80 名前:76 mailto:sage [2008/01/17(木) 15:10:05 ]
- >>78
>>43はstd::ptr_funが使えない。
- 81 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 15:45:44 ]
- >>80
おう、こりゃ失礼
- 82 名前:コンパイルできた [2008/01/17(木) 15:48:16 ]
- 皆さんのおかげ様で、とうとうできました。
ソースは以下です。 template <class T, typename T2> vector<T> line2vec2(string line, char delim, T2 func) { int begin, end; vector<string> v; begin = end = 0; while (line[end]) { begin = end; while (line[end] != delim && line[end]) { end++; } v.push_back(line.substr(begin, end-begin)); end++; } vector<T> v2(v.size()); transform(v.begin(), v.end(), v2.begin(), func); return v2; } この関数をこんな感じで使う。 string s = "1 2 3 4 5 - 6 7 8 9"; vector<int> v = line2vec2<int>(s, ' ', string2int());
- 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だから
|

|