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

このエントリーをはてなブックマークに追加
855848:04/10/28 15:04:47
試してみてもやっぱりうまくいかないのですが・・・
なにか特別なことする必要があるんですか?
アフォなので詳しく教えてください!
856デフォルトの名無しさん:04/10/28 15:07:45
>>850
再帰が深くならなくてすむような
再現データを食わせてみる。


都合のよい小さな再現環境がすぐに
作れなければ
再帰が深くなるたびにデータは狭まるか
答えに近づくかするはずだろうから
おかしくなるデータの範囲を
デバッガやログで絞り込む。

857デフォルトの名無しさん:04/10/28 15:15:32
>>855
本読んで一から勉強したほうが早いっぽ。
858デフォルトの名無しさん:04/10/28 15:18:03
>>854
好きなデータを突っ込める
テスト用のメインプログラムを作る。

絶対作れ。

特に
間違った呼び出し方をしたときに
ちゃんとエラーコードや例外を返せるかとかのテストは
本物の呼び出し元プログラムじゃ
すげー面倒っつーかほとんど不可能。

最近はJUnit VBUnit CppUnittとか便利なのがある。
859デフォルトの名無しさん:04/10/28 15:39:45
質問です。
Rubyで言う、attr_accessor、つまりprivateのメンバ変数に対して
publicのset、get関数を作ってくれるようなシステムが
何かしらのテンプレートを介して使えたりするのでしょうか。
(標準ヘッダを使うではなく、プロジェクトの共通ヘッダとして手書き実装でも可です)
アクセッサを作るのが非常にマンドいんで、何とかしたいと思い
色々検索してみたのですが見つからず……。
宜しくお願いいたします。
860デフォルトの名無しさん:04/10/28 16:06:50
>>859
BCCでいうところのこんなやつか?

class hoge {
public:
 __property int moge = { read=_moge, write=set_moge };
private:
 int _moge;
 void set_moge(int v){ _moge = v; }
};
861デフォルトの名無しさん:04/10/28 16:21:26
使ってるエディタでマクロ組むのが良いんではないかね?
862デフォルトの名無しさん:04/10/28 16:30:30
>>859
多少違うがこんな感じか?
template <typename T>
class value_with_accessor
{
    T value;
public:
    T operator()() const {return value;}
    void operator()(const T &t){value = t;}
};

class Test
{
public:
    value_with_accessor<int> m;
};

Test t;
t.m(4);
std::cout << t.m();
863859:04/10/28 16:33:58
>>860
私の手元はC++BuilderでなくVC++なので……。
なお、VC++では__propertyを使うと変数をいじっているようで
実は関数を介しているっていう奴が実装できるらしいですね、
使った事ないんですが……。

諦めて地道に作れやって事なのかな…… orz
864デフォルトの名無しさん:04/10/28 16:45:14
friendの意味って何?
publicだけじゃダメなの?
不用意に参照されないようにするため?
865デフォルトの名無しさん:04/10/28 16:47:58
>>864
うん。
866859:04/10/28 17:03:48
>>862
ありがとうございます。
さらに修正を加え(readonlyとか)、自分のものに使わせて頂きました。
激しく便利!
(・Д・)こ、これがテンプレートの力なのかっ……!
867859:04/10/28 18:25:46
……と思ったんですが、上記の例でクラスないし構造体のような
ものに適用しようと思ったとき、そのメンバへのアクセスを指定したい時は
どのようにしたら良いでしょうか。
>>862ソースで言うところの
value_with_accessor<int> m;
のintがクラスや構造体の時、mのメンバへのアクセスということです。
そういう時専用のテンプレートを作る事は
止むを得ないとは思うんですが、さらのそのメンバのメンバとかになると
気が遠くなってきます。ダメなのかなぁ……。
868デフォルトの名無しさん:04/10/28 18:34:14
>>867
>>862を改造してもread-onlyにはできない。
きめ細かなアクセス制限を施したいならアクセス関数を書けばいい。
setter/getterを用意するなら、メンバへのアクセスを制限する理由はないんじゃないか?
869デフォルトの名無しさん:04/10/28 18:44:57
つーか、setter/getter作るのが億劫なら公開しちゃえばいいのに。
#私ゃエディタのマクロで作ってるけど。
870859:04/10/28 19:28:19
そうですね、書き込み用の関数をなくすと、誰も書き込めなくなりますしね。
やはりエディタですか。WZにがんばってもらおう……。

デスマ]λ... ドウセオレハマケグミダ...

でもテンプレートたのすぃ事は判明しましたw
871デフォルトの名無しさん:04/10/28 22:30:44
872デフォルトの名無しさん:04/10/28 23:10:33
プログラムが進むにつれて
流れがつかみにくくなりバグフィックスも難しくなる
もう疲れました
たかだか1000行程度なのにバグばっか
この先もっとバグが増えていくとなると気が遠くなります

プログラマーのみなさんの大変さがわかりました
873デフォルトの名無しさん:04/10/28 23:13:29
C++ではなくてCに関する質問なのですが、
関数の引数についてどうしてもよく分からない点があります。

下の関数の引数の渡し方は、どう違うのでしょうか?

void funcTest( char* chrArg ) { ... };

void funcTest( char[] chrArg ) { ... };

874デフォルトの名無しさん:04/10/28 23:18:50
>>872
細かい機能ごとなりの関数に分けるといいよ
>>873
配列とポインタの違い?それ以外何?
875デフォルトの名無しさん:04/10/28 23:23:59
関数の中で chrArg を変更出来るか出来ないか
876デフォルトの名無しさん:04/10/28 23:27:28
>>873
下の書き方はCでもC++でも許可されていません。
877デフォルトの名無しさん:04/10/28 23:28:13
>>872
そら全体の設計が悪いんだよ。
C++を使ってるならオブジェクト指向や
デザパタの入門書を読んでごらん。
一度頭を打ってから読むと有難味が
よく判るよw
878デフォルトの名無しさん:04/10/29 00:56:54
>>873
char[] chrArg なんて形は無いのでは?char chrArg[] ならあると思うけれど。
確か、関数の仮引数の最後のものだけはchrArg[]としてもポインタとして働くはず
だったので、引数が一つならどちらもポインタになると思うけれど、ポインタの方で
書くのが一般的だと思う。

>>875
本当ですか?
879デフォルトの名無しさん:04/10/29 01:20:24
ごめんなさい、878間違っていたので自己レスです

>> 関数の仮引数の最後のものだけはchrArg[]としてもポインタとして働くはずだったので、
引数が一つならどちらもポインタになると思うけれど
上は全部間違いです

関数の仮引数としてのchrarg[]の最後の[]だけはポインタとして働くはずだったので、
[]が一つならどちらもポインタになると思うけれど
が正しいです

自分で読み返して何書いてるんだかって感じでした
880デフォルトの名無しさん:04/10/29 01:22:46
881デフォルトの名無しさん:04/10/29 01:39:04
>>879
どっちにしろ間違いです
882デフォルトの名無しさん:04/10/29 01:56:17
>>879
一から勉強しなおせ。
883デフォルトの名無しさん:04/10/29 07:20:06
Java出身ですか?
884デフォルトの名無しさん:04/10/29 11:13:27
ソートについて質問です
名前、国語の点数、。数学の点数、英語の点数が書いてあるテキストを読み込んで
点数を合計して トップ10を表示するプログラムを作りたいのですが
点数を読む方法が解りません お手数かけますがよろしくお願いします

[テキスト]
ななしさん  30 40 50
ななしさん2 20 50 60
:::
200人まで続きます
885デフォルトの名無しさん:04/10/29 11:57:56
>>884
何が分からないのですか?
ファイルの読み込み?
886デフォルトの名無しさん:04/10/29 12:01:38
>>884
宿題スレ行ったほうがいいぞ。
宿題ならscanfで充分だと思うけど、
ここだと小難しく考える連中が多いからな。
887デフォルトの名無しさん:04/10/29 12:44:46
>>886
scanf()ですか……
小難しいも何も、阿呆につける薬はないな。
888デフォルトの名無しさん:04/10/29 14:55:06
buffのreturnについてアドレスではなく、データを先頭だけでなくすべてのデータを戻り値として
戻すことはできないのでしょうか。
というのもperlでsystem関数でCのモジュールを呼んでいるのですが
その戻り値にバッファのデータを返したいのです。
現状では、アドレスが返ってしまっているようです。
889デフォルトの名無しさん:04/10/29 14:58:22
標準出力やファイルに書き出して、それを読んだら?
890デフォルトの名無しさん:04/10/29 15:02:50
>>858
ありがと。CppUnit挑戦してみます。
891デフォルトの名無しさん:04/10/29 15:08:43
VC++7.0で開発しています。
ごくまれにTRACE()を使用すると、
atltracemodulemanager.hののCAtlTraceProcessクラスのModuleCount()という関数で例外が発生してしまいます。
再現方法もまだわかっていないのですが、とにかくTRACE()をやめることで回避できるようです。
しかしこれが原因でTRACE()で落ちる、という理由がわかりません。
どなたかご存じでしょうか?
892デフォルトの名無しさん:04/10/29 15:08:48
perlにもパイプあったっしょ?
#awkにもあるんだからないとは思わないけど。
Cで標準出力に出させてそれをパイプで取得するか、>889の言うようにファイル経由か。
893デフォルトの名無しさん:04/10/29 16:28:29
>>888
>データを先頭だけでなくすべてのデータを戻り値として

perlはよく知らないが、構造体を使えば出来なくはない。
でもperlのモジュールがそんなアホな仕様になってるわけがない。
もう一度よく仕様読んだほうがいいぞ。
894デフォルトの名無しさん:04/10/29 16:31:57
system関数は外部プロセスを起動するもの
perlモジュールをCで書くXSじゃないよ
895デフォルトの名無しさん:04/10/29 21:46:32
>>892
VC7はよくわからんが、TRACE()の文字上限こえたんじゃない?

896デフォルトの名無しさん:04/10/29 22:12:41
C++で質問なんですが、
friend class
ってのは、

class A{
friend classB;
public:
・・・・・
private:
・・・・・
}
class B{
・・・・・
・・・・・
}
としたら、BからAのpublic, privateを問わずあらゆるメンバを使用可能になるのではないのですか?
GCCを使っているのですが、BのメンバからAの変数やら関数を使おうとしたのですが、
undefine 〜
とエラーが出ます。
なにかヒントになるようなサイトとか助言ありませんか?
897デフォルトの名無しさん:04/10/29 22:18:00
>>896
BでAを触ってるとき
ちゃんとAのクラス定義はincludeしてる?
898デフォルトの名無しさん:04/10/29 22:18:20
classとB;の間にスペースが空いていないぞ。
899デフォルトの名無しさん:04/10/29 22:19:16
y-x>=0で点(0,0)と(1,1)を含まないという条件式は
(y-x>=0)&&((x!=0)&&(y!=0))&&((x!=1)&&(y!=1))
でいいんでしょうか?
900デフォルトの名無しさん:04/10/29 22:28:50
>>899
反例 (1,2)

(y-x>=0) && !((x==0&&y==0)||(x==1&&y==1))
じゃね?
901デフォルトの名無しさん:04/10/29 22:40:47
>>900
ありがとうがざいます
うまくいきました
902892:04/10/30 00:33:55
>>895
はい? TRACE()が何か?
903デフォルトの名無しさん:04/10/30 00:44:40
>>902
アンカーが1個ずれてると思割れ目
904デフォルトの名無しさん
2ch専用ブラウザ厨にそういうミスをする人が多いね。