■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

C++相談室 part37
251 名前:デフォルトの名無しさん :04/11/04 01:56:46
>>247
どうせしないって

252 名前:デフォルトの名無しさん :04/11/04 01:56:50
>>248
> 定義と宣言は一カ所でしろ。

ハァ? 実装を修正するたびにインクルードされてるファイルも毎回コンパイルするんかい。

253 名前:デフォルトの名無しさん :04/11/04 01:57:12
メール欄みただけで釣りだと分かった

254 名前:デフォルトの名無しさん :04/11/04 01:57:26
ネタかよw

255 名前:デフォルトの名無しさん :04/11/04 01:57:35
>>250
遅すぎ。読む前に感覚的に見てJavaという4字があった瞬間にネタだと分かれよ。

256 名前:デフォルトの名無しさん :04/11/04 01:58:20
大したことない設計しかしていない初心者は、1ソ−スに複数記述してもいいでしょう。
でも複数人でプロジェクト組むなら、1ソース1クラスが良いでしょう。
お遊びじゃないんだから。

257 名前:デフォルトの名無しさん :04/11/04 02:01:26
>>242
間違っても一つのクラスで一つのファイルなんて制限するなよ。
ソースを追いにくくなるから。
同じクラスでもグループごとに別ファイルにしたり、ユーザーが読むべき部分と読むべきでない部分は別ファイルにしろ。
C#から入った漏れには当たり前のことなんだが、
世の中には訳分からん無駄な作業をする奴もいるな。

258 名前:デフォルトの名無しさん :04/11/04 02:03:17
>>242
間違っても一つのクラスで一つのファイルなんて制限するなよ。
ソースを追いにくくなるから。
一つのプログラムは全部一つのファイルにまとめて書け。
ハンドアセンブルから入った漏れには当たり前のことなんだが、
世の中には訳分からん無駄な作業をする奴もいるな。

259 名前:デフォルトの名無しさん :04/11/04 02:14:29
もうネタはいいよ。本当に知りたい人が読んだら勘違いするだろ。

260 名前:デフォルトの名無しさん :04/11/04 02:15:31
マジかよ

261 名前:デフォルトの名無しさん :04/11/04 02:23:45
じゃぁまとめよう
一つのプログラムは全部一つのファイルに…



ゲフンゲフン

262 名前:デフォルトの名無しさん :04/11/04 02:31:13
>>261
ちゃうがな

263 名前:デフォルトの名無しさん :04/11/04 02:36:09
1クラス1ファイルとかってファンクタの類でも貫いてたらある意味尊敬するな。

264 名前:デフォルトの名無しさん :04/11/04 02:36:55
>>263
それはさすがにやらんな。

265 名前:デフォルトの名無しさん :04/11/04 04:04:53
>>263
もちろんインナークラスも別ファイルに分けて #include します。

266 名前:デフォルトの名無しさん :04/11/04 06:17:49
>>242
>ソースって一つのクラスごとに一つ作るのがいいんですか?

Cの頃はstaticやexternでシコシコ書くしかなくて
ファイルの分割が即スコープの分割を意味してたから
C++になっていまだにそういう迷信を信じている人も多い


267 名前:デフォルトの名無しさん :04/11/04 11:28:15
1ファイル1クラスにしたらどのクラスを探すのが楽やん

268 名前:デフォルトの名無しさん :04/11/04 11:42:14
俺も興味あるんだけど、結局どっちがいいんだ…「適度に」って言う曖昧なのが一番なのか。
今のところ建設的っぽい意見

・一般的には1クラス1ソースだが、小さいクラスが多いときはある程度まとめる
・再利用しにくいから1クラス1ソース
・実装を修正するたびにインクルードされてるファイルを毎回コンパイルしないために1クラス1ソース
・1クラス1ソースは、ファイルの分割が即スコープの分割を意味していたCの頃の迷信

269 名前:デフォルトの名無しさん :04/11/04 11:56:13
>>268
というか、関連が比較的強いクラスはまとめる。
長くなるようなら分割する。
コンパイルの際のファイル依存は極力減らす(PImplイディオムまではいかなくても)

でいいんじゃないの

270 名前:デフォルトの名無しさん :04/11/04 12:42:40
>>269
うーん、サンクス。となると例えば手元にある「コンポジットのクラスが
まとめられてる長いソース」は分割対象かなぁ。

実用で言ったら依存関係だけ考慮すれば良さそうだけど、
そうもいかないだろうしねぇ。

271 名前:デフォルトの名無しさん :04/11/04 22:42:05
原則論的な話をするとキリがないけど、モノを作り上げる効率性
を考えたら、1ソース1クラスで作ると決めたほうが、はるかに
効率が良い場合がほとんどですね。プロジェクトの分担がし易い
し、誰かが改良をしている時に、ほかの人が手を入れられない、
ということがなくなるし。

そもそも、ソース長すぎて分割しなくてはならない、
ってのは、ソフト業界で生きていくレベルにないね。。。
設計がなってないにもホドがある、ゾ・・・


272 名前:デフォルトの名無しさん :04/11/05 00:01:39
記念マキコ

273 名前:デフォルトの名無しさん :04/11/05 01:00:34
大阪(西梅田)、新宿(JR駅前)のそれぞれ一等地に
拠点を構え、業績急上昇中!未経験者大募集中!の
ソフトウェア開発会社
グリーンシステムを応援するHPです。
http://www.geocities.jp/grs_hp/

応援するスレはこちら!
http://school4.2ch.net/test/read.cgi/job/1077432387/

最高の会社にするため、みんな頑張ってます!



274 名前:デフォルトの名無しさん :04/11/05 12:46:52
とあるクラスのメンバ関数の振る舞いについて質問です

int &Hoge(){
int mage = 0;
return mage;
}

とするとやはり危険なんですよね?
これを解決するために
1.mage を static int にする
2.メンバ変数として int mage を作っておく

Hoge を呼び出す側に変数を用意しておいて
Hoge に参照渡しするのが無難だと思いますが
上記の1,2の方法が問題ないのであれば、どちらがいいのでしょうか?

275 名前:デフォルトの名無しさん :04/11/05 12:50:56
コピーコンストラクタがあれば問題なし

276 名前:デフォルトの名無しさん :04/11/05 13:01:49
>>274
1 と 2 では意味が全然違うが?

277 名前:デフォルトの名無しさん :04/11/05 14:44:02
>>275
コピーコンストラクタをどのように用いればよいのでしょうか?

>>276
揮発性という観点で1,2を挙げたのですが
その違いというのも教えていただけないでしょうか

278 名前:デフォルトの名無しさん :04/11/05 15:18:20
int Hoge() { ... }

279 名前:デフォルトの名無しさん :04/11/05 15:21:53
>>277
#include <iostream>
using namespace std;
class foo {
  int mage;
public:
  foo() : mage(0) {}
  int& Hoge() {return ++mage;}
};
class bar {
public:
  int& Hoge() {
    static int mage = 0;
    return ++mage;
  }
};

int main () {
  foo f[2];
  bar b[2];
  for (int i = 0; i < 2; i++)
    for (int j = 0; j < 3; j++)
      cout << f[i].Hoge() << ' ';
  cout << endl;
  for (int i = 0; i < 2; i++)
    for (int j = 0; j < 3; j++)
      cout << b[i].Hoge() << ' ';
  cout << endl;
  return 0;
}


280 名前:デフォルトの名無しさん :04/11/05 17:54:12
>Cスレの方でも書き込んだのですが、一応こっちも
あるクラスにbuf[4][128]という配列があり、これを単なる外部関数
で使いたいのですが、このアドレスをメンバ関数で取得するには
どう書けばよいのでしょうか?とりあえずこうしてみたのですが 駄
目でした。
class A
{
buf[4][128];
char** getBuf(void) { return (char**)buf; };
}
int main(void)
{
char **ptr;
ptr = classA->getBuf();
ptr[3][100]=100;//ここでハングアップ
}

281 名前:デフォルトの名無しさん :04/11/05 18:13:32
>>280
とりあえずコンパイルできる形にしてから載せろよ…

282 名前:デフォルトの名無しさん :04/11/05 18:17:24
これでどうでしょう?
class AAA
{
private:
char buf[4][128];
public:
char** getBuf(void) { return (char**)buf; };
};
int main(void)
{
AAA aaa;
char **ptr;
ptr = aaa.getBuf();
ptr[3][100]=100;//ここでハングアップ
}


283 名前:デフォルトの名無しさん :04/11/05 18:18:25
メモリレイアウトを考えろ
[0,0]...[0,127][1,0]...[1,127][2,0]...[2,127][3,0]...[3,127]
#include <iostream>
class A
{
public:
  char buf[4][128];
  char* getBuf(void){return (char*)buf;};
  void print(){std::cout << (buf[3][100] & 0xff) << std::endl;}
} classA;
int main()
{
  char *ptr;
  ptr = classA.getBuf();
  *(ptr + 3 * 128 + 100) = 100; // ここでハングアップ
  classA.print();
}
}

284 名前:283 :04/11/05 18:19:04
あ、ごめん、最後の}が余計

285 名前:デフォルトの名無しさん :04/11/05 18:25:11
返答有難うございます。
*(ptr + 3 * 128 + 100) = 100; // ここでハングアップ
これはこの形でないと駄目ということでしょうか?ptr[][]の
形でアクセスする方法はないのでしょうか?

286 名前:デフォルトの名無しさん :04/11/05 18:28:52
>>285
char* ptr; を char (*ptr)[128];に替えればいいだろ。

287 名前:デフォルトの名無しさん :04/11/05 18:37:22
あ、なるほど!ポインタ変数を変えるのですね。関数の戻り値を
変えることばかり考えて、そっちは気づきませんでした。
これで解決できそうです。ちょっとやってみます。

288 名前:デフォルトの名無しさん :04/11/05 19:24:46
>>287
関数の戻り値も変えられるけど?
286とまったく同じ構文で。

289 名前:デフォルトの名無しさん :04/11/05 19:57:01
>>280
> Cスレの方でも書き込んだのですが

いやそれマルチだから
お前ら親切ですね

290 名前:デフォルトの名無しさん :04/11/05 20:21:58
マルチすみません。

>関数の戻り値も変えられるけど?
はい、それを最初に試して、こんな感じにしてみたんですが
コンパイルエラーになります。
char(*)[128] getBuf(void){ return (char*)buf; };
(char(*)[128]) getBuf(void){ return (char*)buf; };

どういう風に書けばよいのでしょうか?

291 名前:デフォルトの名無しさん :04/11/05 20:39:35
>>290
char (*getBuf(void))[128];
あるいは
typedef char (*BUF)[128];
BUF getBuf(void);

292 名前:デフォルトの名無しさん :04/11/05 20:49:50
char (&getBuf(void))[4][128]{ return buf;}
のほうが良いとおもゆ

293 名前:デフォルトの名無しさん :04/11/05 20:55:55
>>291
>>292
試してみました。上手くいきました。

これで完全に解決しました。マルチに最後にまで付き合って
もらってすみません。勉強になりました。

294 名前:デフォルトの名無しさん :04/11/06 01:07:25
class A {
protected: void a() {}
};

class B : public A {
public: void b(A& a) { a.a(); }
};

というコードが vc7.1 で
error C2248: 'A::a' : protected メンバ (クラス 'A' で宣言されている)にアクセスできません。
というエラーになるのですが、これは c++ 標準の仕様なのでしょうか?

295 名前:デフォルトの名無しさん :04/11/06 01:13:41
yes

296 名前:デフォルトの名無しさん :04/11/06 01:38:37
>>294
this->a()しか呼び出せないよ。

297 名前:デフォルトの名無しさん :04/11/06 01:39:14
>>294
やってることを理解してない模様。

298 名前:デフォルトの名無しさん :04/11/06 01:56:40
基本的な事で素朴な質問なんですが、
test.h で、
struct test {
int a;
int b; };
class test2 {
int c;
int d;
SetC(int i);
SetD(int i);
GetC(void);
GetD(void); };
という宣言がなされていて、
test.cpp で、
#include "test.h"
int main(void) {
int sum;
struct test t;
t.a = 0;
t.b = 0;
sum = t.a + t.b;
printf("%d\n", sum)
return 0; }

というような(あまり意味のない)コードを作ったとします。
これをコンパイルした時、test.hのclass test2の方の
内部実装が未定義のSetC,SetD,GetC,GetDやclass test2
自体はどうなっちゃうのでしょうか?test.cの方でclass test2
を使ってなければコンパイルエラーにはならないですが、
実際に出来上がった実行形式ではclass test2の部分の定義
はコンパイラが削除してしまうのでしょうか?

299 名前:デフォルトの名無しさん :04/11/06 02:04:17
>>298
そもそも無いのだから削除する必要も無いのでは?

300 名前:デフォルトの名無しさん :04/11/06 02:33:28
>>296
class B : public A {
public: void b(B& b) { b.a(); }
};
これなら呼び出せるんだよ〜ん。
protectedメンバはthisを含め自分自身と同じ型のポインタ/参照ならアクセス可能。

301 名前:デフォルトの名無しさん :04/11/06 05:31:59
プログラミング言語C++第三版P108の上から二行目の
「しかし、正の整数を表現するためのビット数を一つ増やしたいために
int の代わりに unsigned を使うのは、ほぼ確実によくない」
のところが良く分かりません…これってどういうことなのでしょうか…?

302 名前:デフォルトの名無しさん :04/11/06 06:11:23
「C/C++で unsigned (int以上)を使うのは、ほぼ確実によくない」
に読み替えてかまわないと思うよ。

303 名前:デフォルトの名無しさん :04/11/06 06:23:21
でも理由が自分には良く理解出来ないので気持ち悪いです。
「値を正に保つために unsigned を宣言しても、暗黙の型変換
ルールがあるので、目的を達成出来ない」
ってあるけどこれ読んでも、値は正に保たれてるから別にいいのでは?
と思ってしまうのですが…

304 名前:デフォルトの名無しさん :04/11/06 06:44:09
>>303
前半は、たかが1ビット稼ぐために、unsignedを導入することによって発生する多大なデメリットは割に合わない。
後半は、文脈が分からんので知らん。


305 名前:デフォルトの名無しさん :04/11/06 07:53:03
>>301
そんなん用途によるがな。
いろんな型の欠点ばっかり言い出したら
それこそ使てええのん残らんで。

ただsignedとunsignedの不注意な混用は
ハメられて痛い目見るケースがよくあるから
くれぐれも気をつける癖をつけれちゅうんなら
俺もそう思う。

306 名前:デフォルトの名無しさん :04/11/06 07:53:27
でかいクラス(Form等)を1つのクラスで
複数のソースファイルに分割するというのは一般的に良く行われる事なのですか?
form.hでFormクラスを宣言して、
formcontrols.cppとformevents.cppとforminit.cppで定義を行うというような事です。

307 名前:デフォルトの名無しさん :04/11/06 08:05:12
>>306
一般的、とあるんでイヤだと答えるが・・・
そのケースの事情を見ずに言ってることなんで
声のトーンはごく控えめにしとく

ヘッダとソースとインラインに分けてるのはときどき見かけるなあ

それから「でかい」って何を基準に言ってるのかな?
数千行程度なら全然「でかい」うちに入らんぞ
たとえ数百行程度でも「でかい」と感じることもあるが
わかるか? ライン数やバイト数じゃねえってことだ

308 名前:デフォルトの名無しさん :04/11/06 08:21:05
普通1メソッド1ファイル

309 名前:デフォルトの名無しさん :04/11/06 08:25:52
1プログラム1ソースという結論が他の全てを論破したはずだが?

310 名前:デフォルトの名無しさん :04/11/06 08:31:52
おぞましい結論だな

311 名前:デフォルトの名無しさん :04/11/06 09:13:15
・1つのプロシージャの行数、
・ローカル変数のスコープ範囲、
・命名規則の一貫性の程度
で体感的なファイルの大きさは変わるな。

312 名前:デフォルトの名無しさん :04/11/06 09:17:05
下記のようにコーディングして、テキストファイルを読み込むと、
当然読み込んだデータの末端に余計な改行が入るのですけど、
不要な改行を付加することなく、スマートに
テキストファイルを読み込む方法はないでしょうか?

Open TextFilePath For Input As #1
Do Until EOF(1)
Line Input #1, Temp
ReadData = ReadData & Temp & Chr(13) & Chr(10)
Loop
Close #1
Text1.Text = ReadData

313 名前:デフォルトの名無しさん :04/11/06 09:19:47
>>312
そんなえさで(ry

314 名前:デフォルトの名無しさん :04/11/06 10:19:32
スレ違いだボケ

315 名前:デフォルトの名無しさん :04/11/06 10:20:34
>>312
http://pc5.2ch.net/test/read.cgi/tech/1080569567/


316 名前:デフォルトの名無しさん :04/11/06 11:23:46
--a.cc--
extern void func1(void);

int main(){
...
func1();
}

--b.cc--
extern func2(void);

void func1(void){
...
func2();
}
--c.cc--
void func2(void){
...
}

という3つのファイルがあって,g++ a.ccをするとundefined reference to func2()
がでるのですが,何がいけないのでしょうか?


317 名前::04/11/06 11:27:06
>>316
g++ -c a.cc

318 名前:デフォルトの名無しさん :04/11/06 11:27:07
ゼルダ

319 名前:デフォルトの名無しさん :04/11/06 11:29:56
>>317
なるほど,了解しました.ありがとうございました.
リンクする前にとめればいいんですね.

320 名前:デフォルトの名無しさん :04/11/07 15:21:49
C++は「なんだって出来る」言語だけれど、
何を作るかによって設計を変えないとやっていけない。
クラス設計が関わるレベルであれば、オブジェクト
指向で設計しないと使えないヤツになってします。
アドレス渡しなんてやっていたら・・・オソロシイィィ
でも組み込み機器の設計や、リアルタイム制御の世界
だったら、まだまだポインタは必要だけどね。
トンカチで釘打つ時にトンカチに釘接着してから
木に打ち込もうとしたら、技術のレベルが知れるわね。

321 名前:デフォルトの名無しさん :04/11/07 15:22:19
そこでRubyですよ

322 名前:デフォルトの名無しさん :04/11/07 15:31:17
ところでこのRubyのひとって複数いるの?


323 名前:デフォルトの名無しさん :04/11/07 15:36:13
漏れも思った
一人であちこち巡回してるのかと思うと、
相当なアンチRubyなんだろうなって思う



明らかにRubyに対し悪いイメージしか残してないからなw

324 名前:デフォルトの名無しさん :04/11/07 15:41:20
そこでRubyですよ


325 名前:デフォルトの名無しさん :04/11/07 16:13:52
計算機言語には得手不得手があるからなぁ。
なんでもかんでもC++ってわけにもイカンのはたしかだ。

それでもパフォーマンスとOO設計の両方を兼ね備えたのなんざ
C++とEiffelくらいしか無いからね。


326 名前:デフォルトの名無しさん :04/11/07 16:14:53
そこでRubyですよ

327 名前:デフォルトの名無しさん :04/11/07 16:18:07
Rubyで物理計算やらせると終わらないので却下です

328 名前:デフォルトの名無しさん :04/11/07 16:18:45
このスレは監視されているっ……

329 名前:デフォルトの名無しさん :04/11/07 16:22:14
誰にだよ〜>>328

330 名前:デフォルトの名無しさん :04/11/07 16:26:41
オレオレ、俺だよ、ばあちゃん

331 名前:デフォルトの名無しさん :04/11/07 16:32:14
>>325
C++はともかく
- OCaml
- Objective C
- Delphi
を出さずにEiffelを出すのは何で?
Eiffelはパフォーマンスが要求される所で実績あったりするの?


332 名前:デフォルトの名無しさん :04/11/07 16:37:05
>>331
別に深い意味はないよ、自分で選んだ結果として書いてるだけ。
あげてもらった言語に対しては
ObjectiveC:嫌いではない、Next使ってた頃はすごく重宝した
Delph:環境がWindowsしかない、すごく良くできているのにもったいない
OCaml:ごめんなさい、評価もしたことないのです

なんだよね、Eiffel入れたのは自分が使ったことがあって速度の問題もそれほどでなかったからなんだよ
でも大意としての機械言語には向き不向きがあるって事は了解してくれているんだよね?


333 名前:325 :04/11/07 16:38:44
補足:
ClosとかCommonLispが自分は好きだけどチームからは不評なんです。

334 名前:デフォルトの名無しさん :04/11/07 17:06:06
>>332
Next は NeXT と書いてくれ


335 名前:デフォルトの名無しさん :04/11/07 17:10:46
>>332
DelphはDelphiと書いてくれ

336 名前:デフォルトの名無しさん :04/11/07 17:12:36
>>332
レスどうも
いろんな言語の経験がお有りなんですね
Eiffel使いなんて珍しいなと思って聞いてみました
向き不向きの話は同意です
最近R(S言語)の関数をC++に移植してるんですが
S言語はお気楽すぎて作業が大変です


337 名前:デフォルトの名無しさん :04/11/07 17:13:40
>>332
つっこみどころが多いな!

338 名前:デフォルトの名無しさん :04/11/07 18:00:12
>>337
現につっこめてねえヒヨッ子がはったりかましてんじゃねえw

339 名前:デフォルトの名無しさん :04/11/07 18:09:49
Eiffelは、関数の部分型関係が引数に対してcovariantなのが分かりづらい。

340 名前:デフォルトの名無しさん :04/11/07 18:27:20
>>339
そんだけ混乱してりゃ解りづらいのは道理だなw

341 名前:デフォルトの名無しさん :04/11/07 18:29:47
>>338
>>334-335

342 名前:デフォルトの名無しさん :04/11/07 18:32:26
>>341
なるほど、そういうことか

343 名前:デフォルトの名無しさん :04/11/07 19:35:54
コンストラクタの書き方で悩んでいます。

派生クラスのコンストラクタで受け取った引数を少し加工してから、
基底クラスのコンストラクタに渡してやりたいのですが、
記述方法がわかりません。書く方法あったら教えていただけないでしょうか。

344 名前:デフォルトの名無しさん :04/11/07 19:39:36
struct d : b {
d(int a) : b(a + 1) { }
};


345 名前:デフォルトの名無しさん :04/11/07 19:59:03
>>344
ありがとうございます。助かりました。

346 名前:デフォルトの名無しさん :04/11/08 14:48:20
Objective C は Objective-C と書いてくれ

347 名前:デフォルトの名無しさん :04/11/08 21:58:02
ということは Objective-C = Objetive となるの?

348 名前:デフォルトの名無しさん :04/11/08 22:02:30
>>347
operator-はオーバーロードされてません!残念!

349 名前:デフォルトの名無しさん :04/11/08 22:37:48
'c' - 'C' == ' '
だと思うがどうよ

350 名前:デフォルトの名無しさん :04/11/08 23:33:30
質問です。
データ読み込み関連のクラスでデータを拾ってきて使おうとすると
クラスが層みたいになってるので、どうしても

hoge->getHoge()->getHogeHoge(hoge->getHogeNo())->getHogege()->getString(hoge->getHogeHogeNo()).c_str()
とか長くなってしまいます。
こういうときはどう組んだらよいのでしょうか?

351 名前:デフォルトの名無しさん :04/11/09 00:07:24
get関数の中でget関数を呼べば?

352 名前:デフォルトの名無しさん :04/11/09 00:10:19
>>351
なるほど。
ありがとうございました。

353 名前:デフォルトの名無しさん :04/11/09 01:42:39
typedef double (*FUNCTION)(double, double );
は何を意味しているんですか?
初心者です。よろしくお願いします。

354 名前:デフォルトの名無しさん :04/11/09 01:45:06
二つのdouble型を引数に持ち、戻り値もdoubke型の関数ポインタを型定義している。

355 名前:デフォルトの名無しさん :04/11/09 03:34:36
typedef double (*FUNCTION)(double, double)[20];
は何を意味しているんですか?


356 名前:デフォルトの名無しさん :04/11/09 03:36:10
syntax error です。

357 名前:デフォルトの名無しさん :04/11/09 05:56:25
コンストラクタの呼び出しについてなんですが、皆さんは
T t(tt); // 髭推奨
T t = tt; // 禿推奨
のどちらがいいと思いますか?

358 名前:デフォルトの名無しさん :04/11/09 05:56:53
配列のポインタを返す関数をtypedefするのはどうするの?

359 名前:デフォルトの名無しさん :04/11/09 06:12:24
わざわざtypedefする意味あんの?

360 名前:デフォルトの名無しさん :04/11/09 06:24:32
>>357
コンストラクタをexplicit宣言しておくと微妙に差が出るな。

361 名前:デフォルトの名無しさん :04/11/09 08:36:26
int main()とvoid main()は何がどう違うんですか?

362 名前:デフォルトの名無しさん :04/11/09 09:57:56
>>361
バッチファイルなどのスクリプトから子プロセスとして呼び出した時、戻り値を使えるかどうかの違い。
Windowsのシステム環境変数 「errorlevel」とか、Unixのシェル変数 「$?」で戻り値を取得可能。

バッチの例:
hoge.exe
echo %errorlevel%

363 名前:デフォルトの名無しさん :04/11/09 11:57:11
>>362
説明不充分。voidだと使えないのではない。不定値になるのだ。

364 名前:デフォルトの名無しさん :04/11/09 12:31:10
CUIのプログラムの場合はプログラムの始めと終りが大事なんだけど
GUIの場合ほとんどウインドウ開いて閉じるだけの意味しかない。
Windowsしか知らないでCUIプログラム作ってると意味わかんないだろう。

365 名前:デフォルトの名無しさん :04/11/09 13:24:44
>>363
お前はとりあえず、日本語の勉強しろ。

例としてあげるならば、「使えない奴だな。」は、奴が使用不能であることを指すのではない。
使っても物の役に立たないという意味だ。使う自由はあくまでユーザにある。
お前が日頃から言われていることだからすぐに理解できるだろう。な?

366 名前:デフォルトの名無しさん :04/11/09 13:32:42
>>365
切れどころがわかんね┐(´〜`)┌

367 名前:デフォルトの名無しさん :04/11/09 14:29:19
句読点の使い方をもっと勉強しましょう。

368 名前:デフォルトの名無しさん :04/11/09 14:54:40
まぁ363は揚げ足取りに見えるな
文頭が「補足で〜」とかなら頭良い人に見えるのに

369 名前:デフォルトの名無しさん :04/11/09 15:53:21
>>358
typedef int (*(*FUNCTION)())[];

370 名前:デフォルトの名無しさん :04/11/09 16:30:49
揚げ足の取り合いは醜いポ(´・ω・)y--oO○ エトー・・・

371 名前:デフォルトの名無しさん :04/11/09 22:10:23
クラスで使用する定数をVC++6.0で定義しようとしたら
static const int HOGE=0;
ができないらしいので、enumで代用しました。
文字列定数を使う場合はどうやればいいでしょうか

VC++6.0を窓から投げ捨てる以外の方法を教えてください

372 名前:デフォルトの名無しさん :04/11/09 22:15:33
古いC++コンパイラは糞ばっかだからなぁ。
買い換えましょう。

373 名前:デフォルトの名無しさん :04/11/09 22:19:40
>>371-372
そのクラス宣言内での初期化ができるのはISOでも整数型だけと決まっている。
というわけで普通の静的メンバと同じようにしろ。
//ヘッダ
class Foo
{
  static const char * const HOGE;
};
//cppファイル(1ファイルでだけ)
const char * const Foo::HOGE = "Hoge";

374 名前:デフォルトの名無しさん :04/11/09 22:21:57
>>371
ワラタ
お前が飛び降りれば良いだろw

375 名前:デフォルトの名無しさん :04/11/09 22:22:29
class foo
{
public:
static const int hoge;
};
const foo::hoge = 0;

376 名前:371 :04/11/09 22:24:06
>>373
なるほど。そうだったんですか
ありがとうございました
>>372さんも微妙にありがとう

377 名前:デフォルトの名無しさん :04/11/09 22:25:44
>>371
VC6はARM仕様、ISO/IEC14882と違うつーて騒ぐ池沼は適正なし

378 名前:デフォルトの名無しさん :04/11/09 22:28:32
>>377
GCCこそが標準でありISOは糞である!
そこんとこ間違えないように!

379 名前:デフォルトの名無しさん :04/11/09 22:41:51
>>378
GCC はウンコです。
http://pc5.2ch.net/test/read.cgi/tech/1095583235/528-

380 名前:デフォルトの名無しさん :04/11/10 01:42:53
>>361
void main() は規格外。

381 名前:デフォルトの名無しさん :04/11/10 06:39:49
変数のスコープや使われ方が分かりやすくなるように
いきなりブロックを書いて無理矢理スコープを制限したり
してるんですが、なんだか美しくない気がします。
こういうことは普通にやるものなのでしょうか?

↓こんな感じです
{
    int a1, a2
    if (a1 < a2) return -1;
    if (a1 > a2) return +1;
}
{
    int b1, b2;
    if (b1 < b2) return -1;
    if (b1 > b2) return +1;
}

382 名前:デフォルトの名無しさん :04/11/10 07:40:14
swich - case の中でローカル変数使いたいときはよくやる

switch(式){
case 1:
{
 int a = 1;
 printf("%d\n", a);
}
default:
{
 int a = 2;
 printf("%d\n", a);
}
}

383 名前:デフォルトの名無しさん :04/11/10 07:42:14
default: の前に break; 忘れてる


384 名前:デフォルトの名無しさん :04/11/10 08:10:42
>>381
たまにやる。
古いCではローカル変数をブロック途中で新しく定義するために使う。
C++ではデストラクタのタイミングを調整するために使ったりする。

関数に分けてすっきりした名前が付くなら、分けたほうがいい。

385 名前:381 :04/11/10 08:11:01
>>382
自分もそれはやるんですが、やっぱ>>381はさすがに
冗長?というか余計なお世話なのかなあ、と。
自分的にはブロックで囲むと
{ // hoge する
     /* ... */
}
みたいな感じでコメントも分かりやすくなるのでは?
と思ってたりするのですが、これがほとんどなされない
ような書き方ならば逆に読みにくくなるかもしれないので
やめた方がいいのかと。

386 名前:デフォルトの名無しさん :04/11/10 08:33:06
>>381
普通にやる。むしろ推奨。
最終的にリファクタリングで関数に切り出せることを暗示している。

387 名前:デフォルトの名無しさん :04/11/10 08:36:25
>>384-385
ttp://www.tietew.jp/cppll/archive/7539

388 名前:デフォルトの名無しさん :04/11/10 08:55:14
>>385
確かに古い書き方の人は殆どやらないようだが、スコープがはっきりするので私もお奨め。
例えばこういうケースはfunc()を他人が作る場合にしばしばおきるので。
void myFunc()
{
int x, y;
...;
x = ...;
...;
y = ...;
int rtn;
{
struct ForFunc tmp = {x, y};
rtn = func(tmp);
}
switch (rtn) {
case FuncRtnOk:
...;
break;
case FuncRtnError:
default:
...;
}
}
まぁ、C++ならブロック化しなくてもすむんだけどね。

389 名前:デフォルトの名無しさん :04/11/10 11:56:09
無名名前空間内の関数って名前空間内で定義しないとダメなんですか?

390 名前:デフォルトの名無しさん :04/11/10 14:27:29
map をキーではなく値でソートさせるようには出来ないのでしょうか?

391 名前:デフォルトの名無しさん :04/11/10 15:17:55
>>390
キーと値を逆にしたものを持てばいい。

392 名前:デフォルトの名無しさん :04/11/10 17:48:51
>>389
その通り。

393 名前:デフォルトの名無しさん :04/11/10 19:18:36
>>390
最新版のboostには複数要素を基準にソートできるコンテナが入る。

394 名前:デフォルトの名無しさん :04/11/10 23:08:07
int* p_ = 0;
void reg(int* p) { p_ = p; }
void foo() { ++(*p_); }

int i = 0;
reg(&i);
std::cout << i << std::endl;
foo();
std::cout << i << std::endl;

とした場合、iが最適化でfoo()前後で同じ値が使われるということはあるのでしょうか?

395 名前:デフォルトの名無しさん :04/11/10 23:12:24
ないんじゃね?もし何か具体的にコンパイラの挙動を疑っているの
ならばそのコンパイラを晒した方がレスが早そうだが。

396 名前:394 :04/11/10 23:19:52
>>395
ttp://forums.belution.com/ja/cpp/000/009/26.shtml
ここの・ライブラリに関連ってとこでそんなことが書いてあったのですが
もしこういう最適化をされたら面倒だなと思ったのです。

397 名前:デフォルトの名無しさん :04/11/10 23:23:29
>>396
エイリアスを使わないと仮定するとか
そういうようなコンパイルオプション使うとそうなります。

398 名前:デフォルトの名無しさん :04/11/10 23:26:27
>>394
標準関数でない関数呼び出しの前後で、完全ローカル(*)でない変数が同じであることは期待しないで最適化するはず。
つまり、きちんと違う値が出力されるはず。
#完全ローカルと書いたが、要はアドレス参照されてないローカル変数。

399 名前:394 :04/11/10 23:40:33
>>397
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vccore/html/_core_.2f.oa.2c_2f.ow.asp
これのことですね。
>>395, >>397-398
よくわかりました。ありがとうございました。

400 名前:デフォルトの名無しさん :04/11/11 00:57:36
class Hige{
};

class Hoge:public Hige{
};

class Mage:public Hoge{
private:
std::vector<Hige> hige;

public:
Mage(){
hige.push_back( /* ここにHogeが持つclass Higeを入れたい */ );
}
};

このようなことが実現可能でしたら、その方法をご教授ください。
よろしくお願いします。

401 名前:デフォルトの名無しさん :04/11/11 00:59:09
自分の基底クラスへのポインタがほしいと言うことか?

402 名前:デフォルトの名無しさん :04/11/11 01:02:01
>>400
vectorの中身がポインタではないのでコピーになっちゃいますよ?

403 名前:デフォルトの名無しさん :04/11/11 01:02:14
たぶんそのことだと思います^^;

Mageに継承したHogeの、さらに継承元のHigeを
higeに格納したいのですが…

404 名前:デフォルトの名無しさん :04/11/11 01:05:32
やっぱポインタじゃないと直接アクセスは無理ですか…^^;

つまり
std::vector<Hige*> hige;
にしておき、基底クラスへのポインタを hige に格納というわけですよね?

基底クラスとやらを勉強してきます
即レスありがとうございました

405 名前:デフォルトの名無しさん :04/11/11 01:06:36
>>404
勉強するのはそっちじゃないと思う・・・。

406 名前:デフォルトの名無しさん :04/11/11 01:07:34
およ…

407 名前:デフォルトの名無しさん :04/11/11 01:09:26
って、「基底クラスのポインタの返し方」ですよね?^^;

408 名前:デフォルトの名無しさん :04/11/11 01:11:44
thisでいいやん。


409 名前:デフォルトの名無しさん :04/11/11 23:37:35
クラスAとクラスBがあって、
クラスAがクラスBのポインタを保持
クラスBがクラスAのポインタを保持
っていうのは可能でしょうか?
相互にクラスポインタを保持すると何故かコンパイルエラーが出るのですが…

410 名前:デフォルトの名無しさん :04/11/11 23:48:03
>>409
ポインタならできるはず・・・
ただ先行宣言が必要だけど

class B;

class A {
  B* b_;
};

class B {
  A* a_;
};

411 名前:デフォルトの名無しさん :04/11/11 23:53:41
先行宣言というより friend class っぽい悪寒

412 名前:デフォルトの名無しさん :04/11/11 23:58:35
>>400
hige.push_back(*static_cast< Hige * >(this));

>>409
class B;

class A {
private:
  B *b;
};

class B {
private:
   A *a;
};

413 名前:デフォルトの名無しさん :04/11/12 00:22:18
ちゅーか>>409
Cの自作関数の作り方から勉強し直しの予感

414 名前:409 :04/11/12 00:43:16
>>410-412
先行宣言じゃなく相互にヘッダをincludeしてたんですがエラーの原因は別でした。
試行錯誤の結果無事できました。レスありがとうございました。

>>413
ちゅーかc++の勉強不足でした…orz

415 名前:デフォルトの名無しさん :04/11/12 01:36:06
>>414
> 相互にヘッダをincludeしてたんですが
詳しく

416 名前:デフォルトの名無しさん :04/11/12 02:03:36
>>415
あ、すみません。よく見たらちゃんと先行宣言もしてありました。

---a.h---
#include"b.h"
class a{
public:
a(b* bb){pb = bb;}
b* pb;
};

---b.h---
#include"a.h"
class a;
class b{
public:
b(a* aa){pa = aa;}
a *pa;
};
簡略化するとこんな感じのソースでした。では。

417 名前:デフォルトの名無しさん :04/11/12 08:43:35
もういっぺん基礎からやり直せ

418 名前:デフォルトの名無しさん :04/11/12 09:16:47
int b();
int a() { b(); }
int b() { a(); }

419 名前:418 :04/11/12 09:17:31
ゴメソ勢いでintっちまった

420 名前:デフォルトの名無しさん :04/11/12 15:14:51
code_a.cc
code_b.c
というC++とCの二つのcodeがあります。
code_aで使っている関数のうちb1()はcode_b.cで定義されていて、
code_bで使っている関数のうちa1()はcode_a.ccで定義されています。

Makefileの中に
code_a: code_a.o code_b.o
code_a.o: code_a.cc
code_b.o: code_b.c
という依存関係が書かれており、
make code_a
をすると
g++ -c -o code_a.o code_a.cc
gcc -c -o code_b.o code_b.c
gcc code_a.o code_b.o -o code_a
code_a.o: In function `main':
code_a.o(.text+0xa1a): undefined reference to `b1()'
code_b.o(.text+0x907): undefined reference to `a1()'
collect2: ld returned 1 exit status
make: *** [code_a] Error 1

というlink errorが出ます。
code_a.ccをの中身を書き換えて(constを#defineにしたり)、
code_a.cに変えてしまえば問題なくmakeが通ります。
code_aをC++のままでmakeしたいのですが、
何が問題なんでしょうか。

421 名前:デフォルトの名無しさん :04/11/12 15:19:20
>>420
/* code_a.cc */
extern "C" int b1(); // b1がCリンケージの関数であることを示す宣言
extern "C" int a1(){/* ... */} // a1をCリンケージの関数として定義

これでうまくいかないかな。

422 名前:420 :04/11/12 15:26:47
どうもありがとうございました。
上手くいきました。
これって基本事項かな?
普段、Cのcodeと混在させるってしないもので。

423 名前:デフォルトの名無しさん :04/11/12 17:54:59
>>422
基本中の基本。

424 名前:デフォルトの名無しさん :04/11/12 17:58:20
C++ FAQくらいよんどこうな


425 名前:デフォルトの名無しさん :04/11/12 20:36:45
C++ を使って数値計算 (おもに行列計算) をやりたいのですが、
フリーで質のよいライブラリってあるでしょうか?
よろしくお願いします。

426 名前:デフォルトの名無しさん :04/11/12 20:40:50
>>425
まずは本スレ21へのレスをどうぞ


427 名前:デフォルトの名無しさん :04/11/12 20:44:17
>>426
ごめんなさい。すでに出ていたのですね。
ご丁寧にありがとうございます。

428 名前:デフォルトの名無しさん :04/11/12 21:20:53
本スレがあるのかと考えてしまった
「本店」とかと同じ使い方か

429 名前:デフォルトの名無しさん :04/11/12 23:11:27
>>416
溜息…

430 名前:デフォルトの名無しさん :04/11/12 23:28:52
>>528
その場合の「本店」自体、イントネーションで二通りの解釈があるな。

431 名前:デフォルトの名無しさん :04/11/13 01:39:34
いわゆる「当店」って意味ですか。

432 名前:デフォルトの名無しさん :04/11/13 10:44:37
本官を侮辱すると(ry

433 名前:デフォルトの名無しさん :04/11/13 12:56:59
javaのdeprecated宣言の様にコンパイル時に該当クラスやメソッドの利用を推奨しない事を警告するような方法はありますでしょうか?
環境に依存しないのが良いのですが特定のコンパイラにはあると言う情報でもかまいません。


434 名前:デフォルトの名無しさん :04/11/13 13:02:29
>>433
クラス単位なら、当該ヘッダに #warn 書いておくとか。

435 名前:デフォルトの名無しさん :04/11/13 16:05:51
>>434
ヘッダ内に移行すべきクラス書きたい時とかどうしようか悩んでしまってるんです。
やはり事由を記述して新しいヘッダ読めって書くべきなんでしょうかねぇ。

むぅ。


436 名前:デフォルトの名無しさん :04/11/13 17:15:25
>>433 doxygen

437 名前:デフォルトの名無しさん :04/11/13 17:20:03
>>433
ttp://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Function-Attributes.html#index-_0040code_007bdeprecated_007d-attribute_002e-1612

438 名前:433 :04/11/13 17:26:13
みなさんありがとう、
gccっていろいろ拡張されているんですねぇ。

とりあえず現行のソースは@deprecatedを使ってdoxygenで作ったマニュアルを見てくださいと#warnに書いておく事にします。


439 名前:デフォルトの名無しさん :04/11/14 11:56:05
コンストラクタのメンバ初期化部って表現力低すぎだよね

440 名前:デフォルトの名無しさん :04/11/14 18:57:58
>>439
配列以外で特に不満はないが・・・

441 名前:デフォルトの名無しさん :04/11/14 18:59:29
構造体も・・・

442 名前:デフォルトの名無しさん :04/11/14 19:02:23
構造体も必要ならコンストラクタ書いちゃうから気にしないなぁ。

443 名前:デフォルトの名無しさん :04/11/14 19:14:34
Win32APIだと構造体だらけで
HOGE hoge = { sizeof(HOGE) };
なんて初期化する場面がしょっちゅうあるからな。

444 名前:デフォルトの名無しさん :04/11/14 19:25:23
>>443
動作上よく出てくるのはいいが
記述上おなじことを何度も書いてる香具師は低脳

445 名前:デフォルトの名無しさん :04/11/14 19:34:59
>>444
それコンストラクタのメンバ初期化と何か関係ある話か

446 名前:デフォルトの名無しさん :04/11/14 19:39:08
>>445

442までは関係あったが、443から関係なくなった

447 名前:デフォルトの名無しさん :04/11/14 19:41:38
>>446
443も関係あるじゃん。

448 名前:デフォルトの名無しさん :04/11/14 19:45:35
>>447
いーや、関係ない
442で終わった話を無理やり続けているだけ

449 名前:デフォルトの名無しさん :04/11/14 20:01:49
あげてる奴はなんでそんなに仕切りたがってるんだ。

450 名前:デフォルトの名無しさん :04/11/14 20:08:28
>>449
別に続けるなとは言ってない
この点でもまたお前は流れが読めてない

451 名前:デフォルトの名無しさん :04/11/14 20:11:42
>>450
屁理屈はいいから。
つか>>444はコンストラクタの話とは関係なかったんだな。
どうりで意味不明だと思った。

452 名前:デフォルトの名無しさん :04/11/14 20:57:51
const参照の代入をコンストラクタ内で行えたら便利よくないか?
よくないか。

453 名前:デフォルトの名無しさん :04/11/14 20:59:00
>>452
「const参照の代入」ってなんだ?

454 名前:デフォルトの名無しさん :04/11/14 21:02:05
int main()
{
unsigned short int a,b,c;// 2 byte
a=40000;
b=30000;

c = (a+b) >> 1;
cout << "a: " << a << endl;
cout << "b: " << b << endl;
cout << "c: " << c << endl;
}


こいつの出力がちゃんと

a: 40000
b: 30000
c: 35000 // ここがオーバーフローして計算されると予想した

になるのはコンパイラが賢いからでしょうか?文法的に正しいのでしょうか?
それともわたしが勘違いしてるのでしょうか?(環境はVC7.1です)

教えてください。

455 名前:デフォルトの名無しさん :04/11/14 21:03:42
希望通りにしたいなら
(unsigned short)(a+b)

456 名前:デフォルトの名無しさん :04/11/14 21:07:24
>>454
"integer promotion" または 「整数の格上げ」 とか、そういうの。

457 名前:デフォルトの名無しさん :04/11/14 21:17:07
>>453
const参照→const Hoge&なメンバ変数がコンストラクタ内なら代入できる。みたいな

458 名前:デフォルトの名無しさん :04/11/14 21:20:52
>>457
初期化で十分だな。そんなの全然便利よくない。

459 名前:デフォルトの名無しさん :04/11/14 21:27:42
>屁理屈はいいから。

プ

460 名前:デフォルトの名無しさん :04/11/14 21:30:22
>>459 どうでもいいから無駄話でageんな。

461 名前:デフォルトの名無しさん :04/11/14 21:45:24
>>458
const変数の初期化をコンストラクタ内でしたいと思うことはかなりある。
参照はなにかとややこしいので出来なくていいと思うが。
JavaもC#も出来るし、次はC++もできるようにして欲しいな。

462 名前:デフォルトの名無しさん :04/11/14 21:50:42
VBのソースをC++に変換するにはどうしたらいいの?

463 名前:デフォルトの名無しさん :04/11/14 21:53:17
いったん.NETにコンバートしてコンパイル。
実行ファイルを逆アセンブルしてC++.NETのソースに戻す。
dotnet2win32を使って普通のコードに直す。
ただし、完全にうまく行くとは限らない。

はい、次の方どうぞ。

464 名前:デフォルトの名無しさん :04/11/14 21:57:33
>>461
初期化したいなら初期化すればいいだろ。
代入できるようにする必要は無い。

465 名前:デフォルトの名無しさん :04/11/14 22:02:41
>>463
即レスありがとう。
私が使用してるのはMicrosoft Visual C++ 6.0なんですが
コンバートできますか?

466 名前:デフォルトの名無しさん :04/11/14 22:03:18
>>464
>>457は「代入」と書いてるが、書いてる内容はJavaなんかの初期化のことだ。
ある計算結果をconstメンバにしたいときとか。

467 名前:454 :04/11/14 22:04:22
>>455-456
ありがとうございます。
キーワードをもとに調べてようやくわかりました。

1. 型は常に、必要であれば、精度を失わないように、サイズの大きな型にプロモートされる
2. int型よりもより小さな整数型が含まれた算術式では、評価の前にint型にプロモートされる
(C++ Primerより)

ということはint型より大きな数値で試せばオーバーフローするのかな?と思って試すと無事(?)フローしました。
int main()
{
unsigned short int a,b,c;// 2 byte
a=40000;
b=30000;
c = (a+b) / 2;
cout << "a: " << a << endl;
cout << "b: " << b << endl;
cout << "c: " << c << endl;

unsigned long d,e,f,g; // 4 byte
d = 4000000000;
e = 3000000000;
f = (d+e) / 2;
g = (d & e) + ((d ^ e) >> 1);
cout << "d: " << d << endl;
cout << "e: " << e << endl;
cout << "f: " << f << endl;
cout << "g: " << g << endl;
}

ありがとうございました。

468 名前:454 :04/11/14 22:06:36
--- 467の結果 ---
a: 40000
b: 30000
c: 35000
d: 4000000000
e: 3000000000
f: 1352516352
g: 3500000000
---

_(._.)_

469 名前:デフォルトの名無しさん :04/11/14 22:11:56
Foo::Foo(int x) : constmember_(x ? Foo::bar() : Foo::Baz()) {}

何も困らんが、釣り?釣られた?

470 名前:デフォルトの名無しさん :04/11/14 22:16:13
>>466
C++で代入と初期化の区別を曖昧にするな。
計算結果をconstメンバにしたけりゃ勝手にしろよ。

471 名前:デフォルトの名無しさん :04/11/14 22:16:16
>>469
誰も困ってるなんて話はしてないわけだが。
そうやってメンバ初期化部分がごちゃごちゃするから
コンストラクタ内で書けるといいねってだけの話だ。

472 名前:デフォルトの名無しさん :04/11/14 22:17:05
そうですよね
Foo::Foo(int x) : constmember_(x ? (x!=1 ? (x!=2 ? ( x!=3 ? (....) : Foo::bar3() ) : Foo::bar2() ) :Foo::bar1()):Foo::bar()) : Foo::Baz()) {}


473 名前:デフォルトの名無しさん :04/11/14 22:17:16
>>470
区別を曖昧にしてるのは俺じゃねーよ。457だ。

474 名前:デフォルトの名無しさん :04/11/14 22:17:57
>>471
469のどこがごちゃごちゃ?
コンストラクタ内で書けるとどうなるの?

475 名前:462 :04/11/14 22:18:21
私はどうしたらいいんでしょう^^:

476 名前:デフォルトの名無しさん :04/11/14 22:19:25
>>474
いちいち例を書かんとダメなのか・・・
メンバが複数あったりコメント書きたかったり、適当に想像しろ。

477 名前:デフォルトの名無しさん :04/11/14 22:19:50
>>475 出て行けばいいとおもうよ。

478 名前:デフォルトの名無しさん :04/11/14 22:20:26
>>475笑えばいいと思うよ。

479 名前:462 :04/11/14 22:22:13
煽らなくても^^:

480 名前:デフォルトの名無しさん :04/11/14 22:26:32
>>460
ああ、ごめんなw

481 名前:デフォルトの名無しさん :04/11/14 22:26:40
笑とけ笑とけ。

482 名前:デフォルトの名無しさん :04/11/14 22:27:26
>>475
自力でゴリゴリするも良し。1から作り直すのもまた宜し。

483 名前:デフォルトの名無しさん :04/11/14 22:29:15
>>475
VBの一関数を書き直すだけとかなら機械的にできなくもないが、
フォームデザインも含めてとなると結局は作り直しになる。

484 名前:462 :04/11/14 22:32:36
>>483
回答ありがとうございます

>VBの一関数を書き直すだけとかなら機械的にできなくもないが、

そういうソフトとかあるんでしょうか?
フォームやデザインは書き直さなくてもいいので良ければ教えてもらえると
幸いです。

485 名前:デフォルトの名無しさん :04/11/14 22:49:54
>>484
スレ違い。環境依存スレへどうぞ。
この辺とか。
http://pc5.2ch.net/test/read.cgi/tech/1098912550/
http://pc5.2ch.net/test/read.cgi/tech/1090652323/
http://pc5.2ch.net/test/read.cgi/tech/1090324689/

486 名前:デフォルトの名無しさん :04/11/15 02:57:03
bmpファイルのビット数を変換するためのサンプルプログラムなどを置いているサイトなどありませんか?

487 名前:デフォルトの名無しさん :04/11/15 05:52:27
>>486
ありますが、純C++の話題じゃないので書けません。

488 名前:デフォルトの名無しさん :04/11/15 05:54:29
Rubyなら簡単だよ!!!!!!!!!!!!!!!!!!!!1

489 名前:デフォルトの名無しさん :04/11/15 07:17:40
>>486
http://pc5.2ch.net/test/read.cgi/tech/1090897159/

490 名前:デフォルトの名無しさん :04/11/15 13:39:12
>>486->>489
スマソ、向こうで聞いてみます。

491 名前:デフォルトの名無しさん :04/11/16 22:18:45
仮想継承やってて sizeof したらサイズがでかいんです
g++ だと普通なのに…

492 名前:デフォルトの名無しさん :04/11/16 22:27:59
>>491
??わからん??
gcc以外のコンパイラではサイズがでかくなるという意味?

493 名前:デフォルトの名無しさん :04/11/16 22:29:33
>>491
どうもそうらしいな。
http://www.s34.co.jp/cpptechdoc/article/sizeof/index.html

494 名前:デフォルトの名無しさん :04/11/17 17:18:58
っていうか、クラスを使う限り、sizeofを使うケースってある?
もちろん、Cの関数を呼び出すケースは別にして。

コンテナとアルゴリズムを適切に使っていれば、
使うケースは無いような気がするけど、どーよ?

495 名前:デフォルトの名無しさん :04/11/17 17:48:26
>>493
基本中の基本

496 名前:デフォルトの名無しさん :04/11/17 20:36:19
template<typename T>
とかの T の種類によって処理を変えたりとかできませんかね

switch (T) {
case int:

みたいな

497 名前:デフォルトの名無しさん :04/11/17 20:38:48
モダーン嫁

498 名前:デフォルトの名無しさん :04/11/17 20:39:58
if (typeid(T) == typid(int) {
     // int の時の処理
} else if (typeid(T) == typid(double) {
     // double の時の処理
} 以下続く

ただし全然オススメ出来ない
特殊化すればいいわけだし

499 名前:デフォルトの名無しさん :04/11/17 20:44:17
ありがとうございます。特殊化というのを調べてみます


500 名前:デフォルトの名無しさん :04/11/17 20:53:38
RTTI牛刀


■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.