スレを勃てるまでもないC/C++の質問はここで 4
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/09/17(水) 15:41:48過去ログ
スレを勃てるまでもないC/C++の質問はここで
http://pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
http://pc11.2ch.net/test/read.cgi/tech/1178503366/
スレを勃てるまでもないC/C++の質問はここで 3
http://pc11.2ch.net/test/read.cgi/tech/1187521676/
0470デフォルトの名無しさん
2008/12/02(火) 21:23:52気持ちはすごいわかる。
自分もそんなに分かってるわけじゃないけど、世間のオブジェクト指向って
それっぽい文法を採用してるよ、ってぐらいなので、そんな気にすることはないと思う。
言語体系が複雑になっているのは、汎用性とのトレードオフじゃないかね。
C言語のコアはシンプルだけど、何かするなら結局OSのAPIとか使わないとならない。
Javaみたいにそれ全部仕様に含んじゃうと、当然仕様は膨らんじゃう。
仕事でチーム作業の場合 C++で統一するってのは仕方ないだろうね
でも自分は C で作ってる。必要最小限のコードで済ませられるし、
プログラムとかプロセスのレベルでシステムを設計すれば、実際のところ
言語はなんでもいいしね。
0471デフォルトの名無しさん
2008/12/02(火) 21:23:55そのうち慣れるって。
慣れたらもう戻れないけどね。いや、戻れるけど
クラス無いのきびしーって思うようになるよ。
関数やローカル変数なかったらきびしーなんてもんじゃないけど。
そういえばCOBOLには無いんだっけw
0472デフォルトの名無しさん
2008/12/02(火) 21:26:04ご回答ありがとう。
C++とVB.NETと一通り勉強したけど、自分でオブジェクト指向でプログラムつくれなくて挫折したわ。
これを理解できるのはかなり頭のいい人だろうね。
趣味でプログラミングをやってるので、チームワークの必要なことはしないし知ってるのは唯一自分でコードが書けたC言語だけでいいかなとも思った。
ところで質問をもうひとつしますが。
ウェブブラウザのFirefoxってフリーでソースが公開されてるけど、
ビルドするのにGCCを用いる様だけど、これってC言語でできてるのでしょうか?
0473デフォルトの名無しさん
2008/12/02(火) 21:30:56オブジェクト指向で何がしたいのか分かると思う
0474デフォルトの名無しさん
2008/12/02(火) 21:33:21確かに色々と覚えることがあって回りくどくて面倒なんで
うんざりするほどその気持ちはわかる。
自分もそう思っていたんで。
でも、とりあえずクラス化したら楽だと思うんだ。
慣れないうちは全部publicなメンバでも良いと思う。
関数名とか変数名とかdrawとかxみたいに短くても楽に管理できるし。
それだけでも重宝するかと。
0475デフォルトの名無しさん
2008/12/02(火) 21:59:58なんだか知らないけれど新たにがんばってみようと言う気になったわ。
ありがとうよ。
0476デフォルトの名無しさん
2008/12/02(火) 23:33:31だけで大分便利。ついでに自分で template 書けるようになると
もっと便利。そんなことしてるうちに自然と OOP。
0477デフォルトの名無しさん
2008/12/03(水) 02:46:39ファイル処理関連はどの言語もOOPみたいなもんだ
単に語順と追加機能の有無だけ
0478デフォルトの名無しさん
2008/12/04(木) 17:38:38左上に「ファイル」、右上に最小化最大化閉じる、といったものがある普通のアプリの段階にはいつ入るものなのでしょうか?
あるいはこういった骨格みたいなの?は入門書的にはなんという項目から始まるものなのでしょうか
0479デフォルトの名無しさん
2008/12/04(木) 17:54:24入門書は普通、CやC++の基礎部分を解説するもの
ウィンドウシステムは応用部分にあたるので
入門書ではあまり語られない
一通り入門書を触ったら、Visual C++ Express 辺りを落として
インスコした Visual C++ をテキトーに弄ったり
Windowsプログラミングの書籍を読んで勉強するヨロシ
0480デフォルトの名無しさん
2008/12/04(木) 18:17:54http://homepage2.nifty.com/c_lang/index_sdk.html
0481デフォルトの名無しさん
2008/12/04(木) 18:19:18ある程度共通項が多い上扱いやすい stdio に対して
ウィンドウシステムの扱いは各環境でバラバラ。
そしてその多くはそれだけで本が1〜数冊書ける複雑さ。
直接扱うのは複雑だからと、簡単に扱うためのライブラリもある。
(WindowsならMFCや.net、LinuxならTkやGTKやQtなど)
それから、色んな環境で扱えるように作られたライブラリもある。
(wxWidgetとか。.netやTkも一応互換環境がありこっちにも分類可能)
環境も手段も多様で、総てを統括するのは困難。
0482デフォルトの名無しさん
2008/12/04(木) 18:32:53ありがとう、また文字を表示する作業から勉強しなおしてきます
0483デフォルトの名無しさん
2008/12/05(金) 09:10:330484デフォルトの名無しさん
2008/12/05(金) 09:34:160485デフォルトの名無しさん
2008/12/05(金) 09:38:400486デフォルトの名無しさん
2008/12/05(金) 11:47:410487デフォルトの名無しさん
2008/12/06(土) 10:25:010488デフォルトの名無しさん
2008/12/06(土) 10:27:230489デフォルトの名無しさん
2008/12/07(日) 10:30:310490デフォルトの名無しさん
2008/12/07(日) 10:47:51アクセスできなくて困ることはあるが。
0491デフォルトの名無しさん
2008/12/07(日) 17:10:34int v(char *c){int i;sscanf(c,"%4d",&i);return htons(i);}
この関数をもっと短くする方法あるかな?
Code Golfの感じで。
引数のcharポインタは"YYYYMMDD"といった数字文字列の領域を指してると思いねぇ。
0492デフォルトの名無しさん
2008/12/07(日) 17:32:09七行スレのログ読めば短くするノウハウが沢山あると思う
0493デフォルトの名無しさん
2008/12/07(日) 18:38:38先頭のintを省く
0494デフォルトの名無しさん
2008/12/07(日) 23:11:370495デフォルトの名無しさん
2008/12/08(月) 08:24:270496デフォルトの名無しさん
2008/12/08(月) 11:20:15いいえ
0497デフォルトの名無しさん
2008/12/08(月) 11:47:46↑を見てインターフェースクラスというものを知ったのですが
インターフェースクラスをスーパークラスとして実装を行った場合、
特定のサブクラスのみが持つようなメンバ関数にアクセスすることができないと思いました。
このサイトに書いてあるインターフェースクラスというものが間違いなのか、
それとも私の理解がぜんぜん足りていないのでしょうか。
どこが間違っているか、どこが理解不足かの指摘をお願いします。
0498デフォルトの名無しさん
2008/12/08(月) 11:51:55型キャストすれば特定のサブクラスのみが持つようなメンバ関数にアクセスすることができる。
reinterpret_castだったかな?
0499デフォルトの名無しさん
2008/12/08(月) 11:54:55特定のサブクラスのみが持つ特殊なメンバ関数などには興味がないはずである
0500デフォルトの名無しさん
2008/12/08(月) 11:55:17>>497のサイトでCExample3という、IExampleを継承したクラスを追加するとして、
IExampleがもしMethod2()というメンバ関数を持っていたら、
大幅な修正を加えないとMethod2を呼ぶことができないように思います。
理解が足りないのでしょうか…
C++は難しいです
0501デフォルトの名無しさん
2008/12/08(月) 11:57:34>>498
レスをありがとうございます。
スーパークラスからサブクラスへのキャストはあまりよろしくないと聞きました。
実際は使っても良いものなのでしょうか。
それとももっと別の書き方をするのでしょうか。
>>499
レスをありがとうございます。
ということは、特殊なメンバ関数を使いたい場合には、
やはりどういったクラスがあるかを確認して、
そのクラスの型を持つポインタを用意する必要があるということでしょうか。
0502デフォルトの名無しさん
2008/12/08(月) 11:58:370503デフォルトの名無しさん
2008/12/08(月) 11:59:21partition(b,e,p)を定義しろってのがあったんだけどだれかおしえてくだしあ><
0504デフォルトの名無しさん
2008/12/08(月) 12:00:59頭の回転が遅いので、これをヒントにもっと考えてみます。ありがとうございます。
0505デフォルトの名無しさん
2008/12/08(月) 12:03:45Javaを学ぶと良い。言語仕様にInterfaceを含んでいる。
0506デフォルトの名無しさん
2008/12/08(月) 12:04:01特定のサブクラス固有の特殊なメンバ関数を使いたいというのは、
すべてのクラスを共通のインタフェイスで扱いたいという趣旨に反している
設計がどこかおかしい
0507デフォルトの名無しさん
2008/12/08(月) 12:42:56template<class T>void copy(T * b, T * e, T * d) {for (; b != e; ++b, ++d) *d = *b;}
他は仕様が余りに曖昧なのでパス。
0508デフォルトの名無しさん
2008/12/08(月) 12:50:36template<typename FI, typename PRED>FI partition(FI b, FI e, PRED p)
{
if (b == e) return b;
while (p(* b)) if (++b == e) return b;
FI n = b;
while (++n != e) if (p(* n)) swap(* ++b, * n);
return b;
}
0509デフォルトの名無しさん
2008/12/08(月) 14:05:260510デフォルトの名無しさん
2008/12/08(月) 14:11:070511デフォルトの名無しさん
2008/12/08(月) 14:11:410512デフォルトの名無しさん
2008/12/08(月) 14:23:05でもなんか動作がほんの少しちがうようだ。原因は不明
0513デフォルトの名無しさん
2008/12/08(月) 14:27:01つーか、>508ってSTLの実装じゃないの?w
0514デフォルトの名無しさん
2008/12/08(月) 14:33:51ここで「unused parameter 'parent'」のWarningが出てしまいます。
コンパイラを変える
コンパイラオプションを変える
#pragmaで抑制する
以外の簡単な解決法があれば教えてください。
0515デフォルトの名無しさん
2008/12/08(月) 14:39:340516デフォルトの名無しさん
2008/12/08(月) 14:48:54�d
なんで気付かなかったんだろ
0517デフォルトの名無しさん
2008/12/08(月) 14:51:060518デフォルトの名無しさん
2008/12/08(月) 21:46:41class CHoge
{
const int path; // ここでのconstがエラー?
public:
CHoge();
void Show();
};
CHoge::CHoge(){ path = 1024; }
void CHoge::Show(){ printf( "%d\n", path ); }
void main()
{
CHoge hoge;
hoge.Show();
}
上記のソースでコンパイルするのですが
error C2758: 'path' : オブジェクト コンストラクタの初期化リストで初期化されませんでした。
とコンパイルエラーがでます
const int path を int path にするとコンパイルは通るのですが、
pathをconstにして変更不可にしたい場合どのような手段があるのでしょうか?
0519デフォルトの名無しさん
2008/12/08(月) 21:53:52↓
CHoge::CHoge() : path(1024){}
constなんだから代入できるわけ無いだろカス
0520デフォルトの名無しさん
2008/12/08(月) 22:10:07ではどうしろと?
0521デフォルトの名無しさん
2008/12/08(月) 22:14:110522デフォルトの名無しさん
2008/12/08(月) 22:17:27参考書にはその書式載ってなかったんだ
ありがとう
0523デフォルトの名無しさん
2008/12/08(月) 22:30:52class CHoge
{
const int path
public:
CHoge();
void Show();
};
CHoge::CHoge() : path(1024){}
void CHoge::Show(){
char lo[path]; // ここでエラー
printf( "%d\n", path ); // ここはOK
}
void main()
{
CHoge hoge;
hoge.Show();
}
う〜ん
error C2057: 定数式が必要です。
error C2466: サイズが 0 の配列を割当てまたは宣言しようとしました。
error C2133: 'lo' : サイズが不明です。
とエラーがでるんですが、#define の変わりにはならないんでしょうか?
0524デフォルトの名無しさん
2008/12/08(月) 22:34:22CHoge::pathとかいろんな言語でありがちな書き方だと思うけど
0525デフォルトの名無しさん
2008/12/08(月) 22:37:070526デフォルトの名無しさん
2008/12/08(月) 22:45:11あとそうすると定義方法が変わるけど
0527デフォルトの名無しさん
2008/12/08(月) 22:46:20C++ではできるよ
0528デフォルトの名無しさん
2008/12/09(火) 00:04:01これ、クラス・関数外ならstaticは要らない。
0529デフォルトの名無しさん
2008/12/09(火) 11:59:20while(a!=c) a++;この文ってa++だけ繰り返すんだよね?
0530デフォルトの名無しさん
2008/12/09(火) 12:00:25static ではない const は「インスタンス生成後に書き換えないよ」というだけで
コンパイル時に決定できないかも知れない。なので、
>#define の変わりにはならないんでしょうか?
ならない。ここは素直に頭に static 付けて、後ろに = 1024 付けるよろし。
但し、もし VC++ 6.0 だとこれもできないんで enum hack 使うしかない。
>>529
是。
0531デフォルトの名無しさん
2008/12/09(火) 12:07:40529だけどおkと解釈しますね
0532530
2008/12/09(火) 12:42:49そです。おk。
0533デフォルトの名無しさん
2008/12/09(火) 13:02:42a!=c も繰り返すよ、というのが正確だけどまあいいか
0534デフォルトの名無しさん
2008/12/09(火) 14:23:28なんでa=c;にしないの
0535デフォルトの名無しさん
2008/12/09(火) 14:36:210536デフォルトの名無しさん
2008/12/09(火) 15:01:030537デフォルトの名無しさん
2008/12/09(火) 15:43:060538デフォルトの名無しさん
2008/12/09(火) 16:28:47言われてみればそうだな
指摘あんがと
0539デフォルトの名無しさん
2008/12/09(火) 18:14:40大丈夫、中国語では「そう」って感じの意味だ
0540デフォルトの名無しさん
2008/12/09(火) 18:43:190541デフォルトの名無しさん
2008/12/09(火) 19:59:200542デフォルトの名無しさん
2008/12/09(火) 20:15:130543デフォルトの名無しさん
2008/12/10(水) 02:06:45「是」は「はい」だ
「対」が「そう」に近い
0544デフォルトの名無しさん
2008/12/10(水) 02:46:18対か。謝謝。
0545デフォルトの名無しさん
2008/12/10(水) 08:30:11つまり、「「はい」ではなく「いいえ」だとしても」という意味だね。
0546デフォルトの名無しさん
2008/12/10(水) 09:24:260547デフォルトの名無しさん
2008/12/10(水) 09:36:53台詞からして、相良軍曹だな。
0548デフォルトの名無しさん
2008/12/10(水) 12:46:39scanf()は入力したものを受け取る関数だと思うのですが、
受け取れる箇所は1つだけなのでしょうか?
例:scanf("%d",&a)は10進数で受け取り、aに保存?すると思いますが
scanf("%d",&a,&b)のように複数に保存できるようにはできないでしょうか?
変な質問でスマソ、意味がわからなかったら軽くスルーしてください orz
0549デフォルトの名無しさん
2008/12/10(水) 12:48:08scanf("%d %d", &a, &b);
//コンマ区切り
scanf("%d,%d", &a, &b);
0550デフォルトの名無しさん
2008/12/10(水) 17:40:07b=a;
とするしか。
0551デフォルトの名無しさん
2008/12/10(水) 18:09:08馬鹿だな。
0552デフォルトの名無しさん
2008/12/10(水) 21:41:53下記画像のようにスペース部分に色つき矢印やらドットやらが表示されて消えなくなってしまいました。
どこかでキーボード押し違えたみたいで・・
この設定の解除の仕方を分かる方いたら教えてください><
↓
http://imepita.jp/20081210/770880
0553デフォルトの名無しさん
2008/12/10(水) 21:42:55#-------------------------------------- リンカ(GUI)
linkexe = $(linkopt) -Tpe -aa
#-------------------------------------- リンカ(CONSOLE)
linkcon = $(linkopt) -Tpe -ap
#-------------------------------------- リンカ(DLL)
linkdll = $(linkopt) -Tpd -aa
linkconとlinkdllのマクロが使用されている箇所が、
この行以下にはありません。
しかし、linkconとlinkdllの記載を削除すると、リンク時にエラーが出ます。
$(name)T.EXE: FOO1.OBJ $(sobj) $(name)T.RES
$(linkexe) @&&|
$(C0GUI) FOO1 $(sobj)
$(linkout)$.
!if $(UseBCC)
$&
$(DebugLib) NOEH32 IMPORT32 CW32
!endif
$&.RES
|
質問
�@リンクエラーでは、 $(linkexe) @&&| という部分に関係がしていると思われるのですが、
@&&| の意味が分かりません。この意味について教えて頂けませんでしょうか。
または参考になるサイトがあれば、そちらを教えて頂きたいです。
�A$(linkout)$.
$. の意味も分かりません。
0554デフォルトの名無しさん
2008/12/10(水) 21:46:49Make専用スレへどうぞ。
>>552
VisualStudio専用スレへどうぞ。
どちらもC/C++の質問ではありませんね。
0555552
2008/12/10(水) 22:31:10またよろしくお願いします。
0556553
2008/12/10(水) 22:32:45またよろしくお願いします。
0557なめ
2008/12/10(水) 22:39:29というフォーマットのファイルがあるとします。
これを、それぞれを文字列として、構造体に格納するとします。
構造体の例:
struct{
std::string a; // IDを格納
std::string b; // 名前を格納
std::string c; // 性別を格納
}_dataType;
各行には、上記の3つのレコードだけだとして、
区切り文字は、半角空白か、Tab('\t')
行末には空白文字は許容するけど、それは、構造体の「性別」を格納する変数には
含まない
てな条件で、データファイルを読み込む場合、
std::stringで、std::getline() を使う
char * で、fstream::getline()をつかう
char * で、fgets()を使う
その他
どれが一番楽なのか教えてほしいっす。できれば、切り分けするところのサンプルなんかも。。。
環境:gcc + cygwin
できれば、Linuxにも流用したいので、Win系のライブライは使いたくないです。
0558デフォルトの名無しさん
2008/12/10(水) 22:45:46http://pc11.2ch.net/test/read.cgi/tech/1226229627/57,60-61
0559デフォルトの名無しさん
2008/12/10(水) 22:51:07短絡的な意味で最も簡単なのはfscanfだろうね
0560デフォルトの名無しさん
2008/12/10(水) 22:55:56char tId[1000];
char tName[1000];
char tGener[1000];
fscanf(fp, "%999s%999s%999s", tId, tName, tGender);
fclose(fp);
_dataType foo = {tId, tName, tGender};
0561デフォルトの名無しさん
2008/12/10(水) 23:16:19え?
0562デフォルトの名無しさん
2008/12/11(木) 09:02:29そういう質問みたいだが。
>>548
>scanf("%d",&a,&b)のように複数に保存できるようにはできないでしょうか?
>>557
楽なのは stream I/O で >> 演算子。
>>560
無根拠に1000とか。
0563デフォルトの名無しさん
2008/12/11(木) 10:21:06としたいだけだろ。b)を全角で書くような奴の質問だぞ。
0564デフォルトの名無しさん
2008/12/11(木) 10:41:120565デフォルトの名無しさん
2008/12/11(木) 11:56:03if elseで場合わけしてっていうのならわかりますが
0566デフォルトの名無しさん
2008/12/11(木) 12:09:060567デフォルトの名無しさん
2008/12/11(木) 12:13:53判定: (true→true)∨(false→false)
0568デフォルトの名無しさん
2008/12/11(木) 12:18:57言いたいことがよくわからん。
複数のフラグをint型の変数に保存していて、その簡単な取り出し方法
ということなら (質問の意味は) わかるが。
0569デフォルトの名無しさん
2008/12/11(木) 12:19:38すいません
0570デフォルトの名無しさん
2008/12/11(木) 12:21:34■ このスレッドは過去ログ倉庫に格納されています