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


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

C++相談室 part17
501 名前:デフォルトの名無しさん :03/03/28 23:58
だからスレ違いって言っちょるだろが!

502 名前:デフォルトの名無しさん :03/03/29 00:00
windows 用のソースで

class xxx
{
 public:

 union
 {

  struct
  {

   xxx xxx; // xxx は他のクラス
   float xxx;
  };

  struct
  {
   float xxx, xxx, xxx, xxx;
  };

  float xxx[4];

 };

 .
 .
 .
てのがありまして、これを linux の g++ でコンパイルすると、
struct の 所で、

503 名前:502 :03/03/29 00:01
(つづき)

anonymous class type not used to declear any object
と言われます。それで struct の定義の後に とりあえず s1, s2 と名前を
つけたら、今度は、
member "struct quat::{anonymous union}::{anonymous} quat::{anonymous union}::s1" with
constructor not allowed in union と言われました。
それでさらに union に u1 と定義してみましたが、同じエラーになりました。
これってどうすれば通りますか?

504 名前:デフォルトの名無しさん :03/03/29 00:08
最近はじめったばっかりで"Hello world"からはじめてたんですけど。
インクルードファイル"stdio.h"が開けないってエラーでました。

#include<stdio.h>

main()
{
printf("Hello World\n");
}

初歩的すぎてごめんなさい。

505 名前:デフォルトの名無しさん :03/03/29 00:15
はいはい、ネタ質問は他所でどうぞ。

506 名前:デフォルトの名無しさん :03/03/29 00:15
>>504
これと
#include <stdio.h>
これの違い調べてみ
#include "stdio.h"
そしたらついでに分かるから


507 名前:504 :03/03/29 00:26
>>506
わかりまつた。
やってみます


508 名前:504 :03/03/29 00:48
お手上げでつ(´Д`;)

""は文字列・・・?
<>・・・?

509 名前:デフォルトの名無しさん :03/03/29 00:55
( ゚д゚)

リファレンス読むとかしないわけ?

510 名前:504 :03/03/29 01:00
マジで初心者なんで。。。

なんかここにいるべき人間ではなさそうなので・・・逝ってきます・・。
でもやれるだけはガムバルつもりでつ。

511 名前:デフォルトの名無しさん :03/03/29 01:48
#include <iostream>で逝っとけ。もしくは
#include <iostream.h>

512 名前:デフォルトの名無しさん :03/03/29 04:07
>>504
ヘッダーファイルへのパスが通ってねーんだよ!ヴォケが。

513 名前:デフォルトの名無しさん :03/03/29 08:50
list201.cppのソース
#include<stdio.h>
#include<stdlib.h>
int main(int ac, char *av[])
{
int n;
printf("引数 %d 個\n", ac);
if(ac != 1){
n = atoi(av[1]);
printf("値 %d \n", n);
return n;
}
return 999;
}
list202.cppのソースが
#include<stdio.h>
#include<stdlib.h>
void main(int ac, char *av[])
{
int n;
if(ac != 1){
n = system(av[1]);
printf("戻り値 %d \n", n);
}
}
としたときに、list202 list201とコマンドを実行したとき
戻り値 999
と表示されるはずなのに
戻り値 0
となってしまいます。どうしてでしょうか?

514 名前:デフォルトの名無しさん :03/03/29 10:07
>>513
当然。system()は実行したコマンドの戻り値を返すわけではない。
「コマンドプロセッサ」の戻り値を返す。だからコマンドプロセッサが
正常に起動されたら0を返す。
それからとても激しく環境依存です。

515 名前:デフォルトの名無しさん :03/03/29 10:50
>>513
これはc++ではないですね。
--- a1.c ---
int main (int argc, char *argv[]) {
 if (argc != 1)
  return atoi (argv[1]);
 return 0;
}
--- a2.c ---
int main (int argc, char *argv[]) {
 if (argc != 1)
  printf ("%x\n", system (argv[1]));
 return 0;
}
のとき
./a2 './a1 0' ---> 0
./a2 './a1 -1' ---> ff00
./a2 './a1 3' ---> 300




516 名前:C++いちねんせい :03/03/29 15:38

コンストラクタのについて教えて下さい。
以下のソースをコンパイル&リンクすると
コンストラクタ(2)がリンク時に「 LNK1120: 外部参照 1 が未解決です。」
となり、リンクできないのですが何故なのでしょう?
コンストラクタ(2)の本体(という言い方でいいのかな?)をclass{ }
内に持っていくとリンクまで通ります。なんでかなぁ?

[aaa_class.hpp]
class aaa
{
public :
aaa() { cout << "コンストラクタ(1)が呼ばれた\n" ;}
aaa(int size,char *s) ;
};
[aaa_class.cpp]
aaa::aaa(int size,char *s)
{
cout << "コンストラクタ(2)が呼ばれた\n"
cout << size << '\n' ;
cout << s << '\n' ;
}
[main.cpp]
int main(int ac,char **av)
{
aaa d1;
aaa d2(10,"ABCDEFG") ;
}


517 名前:デフォルトの名無しさん :03/03/29 15:53
>>516
aaa_class.cppがコンパイルされてないとか

518 名前:デフォルトの名無しさん :03/03/29 16:52
>>516
一応、[aaa_class.cpp] と[aaa_class.hpp]に using namespace std; を書いておけ
うちではコンパイル通るぞ

519 名前:叩かれるかな、と思った496 :03/03/29 18:40
>>497


520 名前:519 :03/03/29 18:41
激しくミスった
「ありがとう」と書くつもりやったんやけどクソレスになるから
「やめる(C)」をクリックしようと思ったらそれが「書(ry

521 名前:デフォルトの名無しさん :03/03/29 19:59
パシャ パシャ  パシャ パシャ パシャ  パシャ パシャ パシャ パシャ パシャ
   パシャ パシャ パシャ パシャ パシャ  パシャ パシャ パシャ  パシャ  パシャ
 ∧_∧      ∧_∧     ∧_∧  ∧_∧    ∧_∧     ∧_∧
 (   )】      (   )】    (   )】 【(   )    【(   )    【(   )
 /  /┘ .   /  /┘.    /  /┘ └\ \   └\ \   └\ \
ノ ̄ゝ     ノ ̄ゝ      ノ ̄ゝ     ノ ̄ゝ    ノ ̄ゝ     ノ ̄ゝ

522 名前:デフォルトの名無しさん :03/03/30 00:38
メンバーが変数だけならstructを使いますか?

523 名前:デフォルトの名無しさん :03/03/30 01:12
>>522
というか全部のメンバを初めからpublic属性にしたい時にstructを
使うと楽。public: とタイプせずに済む。

524 名前:デフォルトの名無しさん :03/03/30 01:59
一時的にしか使用しないクラスって
new する意味ってあるの?

void func()
{
std::string str = "onigiriwassyoi";
puts(str.c_str());
}

void func()
{
std::string* str = new std::string("onigiriwassyoi");
puts(str->c_str());
delete str;
}

の違い。

525 名前:デフォルトの名無しさん :03/03/30 01:59
変数名の最初に
_つけちゃ駄目って聞いたけど何で?

526 名前:デフォルトの名無しさん :03/03/30 02:26
_で始まって大文字が続く識別子はC++の予約後
__で始まる識別子はC++の予約後
_で始まる識別子はCの予約後

いちいち説明するのが面倒なので
_で始まる識別子は使うなと言ってるだけ

変数名以外にも#define識別子とかにも使うなよ

527 名前:デフォルトの名無しさん :03/03/30 03:57
>>526
「処理系の実装者のために予約されている」だな。
ちなみに __ は始めだけじゃなくて、それを含む名前全部だったはず。

528 名前:デフォルトの名無しさん :03/03/30 04:09
先頭がアンダースコアになっている名前は、実装や実行時環境の特別な機能のために予約されているので、アプリケーションプログラムではそのような名前を定義しないようにすべきである。


禿げ第三版日本語版より。


529 名前:デフォルトの名無しさん :03/03/30 05:18
>>526-528
Σ(゚Д゚)
使いまくってた。

>禿げ第三版日本語版より。
って何の本?
詳細キボンヌ。

530 名前:デフォルトの名無しさん :03/03/30 05:41
>>529
禿げ = Bjarne Stroustrup
つまりはプログラミング言語C++第三版のこと。

531 名前:デフォルトの名無しさん :03/03/30 06:05
>>530
情報ありがとう。

7000円は、高すぎる。
EffectiveC++とC++FAQを買って
ある程度読んだ俺には
買う必要は、ありますか?

とりあえず、明日本屋で流し読みしてみる。

532 名前:デフォルトの名無しさん :03/03/30 06:13
>>530
ストラウストラップ先生を禿げと呼んでいるのか。
いいセンスだ。

533 名前:デフォルトの名無しさん :03/03/30 06:15
>>531
>>530ではないが、C++のバイブルなので、なにはなくとも
読むべきだとおもうが…

534 名前:デフォルトの名無しさん :03/03/30 06:51
漏れもK&RもC++も読んだことないなぁ
規格書はよく見るけど

535 名前:デフォルトの名無しさん :03/03/30 09:00
それはそれでイイ

536 名前:デフォルトの名無しさん :03/03/30 12:05
4人のギャングに騙されると、メンバに _ を付けてしまう罠
でも確かに m_ ってダサイよなぁ、とか思ったりも


537 名前:デフォルトの名無しさん :03/03/30 12:09
>>536
_を前につけるのはC/C++規格違反だから
後ろに付けるっていう案もあるが、すごい違和感あるよな

538 名前:536 :03/03/30 12:14
>>537
後ろはあかんね。前が駄目なんで一時期やってたが、どうも合わない。

やっぱり最初(変数の)に情報が来ないと、認識しづらいのかな。人間って。

539 名前:デフォルトの名無しさん :03/03/30 12:26
>>538
そうか? 俺はもうメンバ変数の後ろにアンダーバーが無いと
なんか落ち着かないのだが

540 名前:デフォルトの名無しさん :03/03/30 12:26
_(([a-z])+[_A-Z]*)?
はC++で使ってもよいことになってたはず。
Cでは駄目だが

トニカク説明するのが面倒だから _で始まるのは駄目と
いうのは同意

後ろに_をつけるのは慣れた。


541 名前:デフォルトの名無しさん :03/03/30 12:27
なんかちょっと変。

_ 自身と _の次に英小文字か来るのはOKといいたかった

542 名前:デフォルトの名無しさん :03/03/30 13:44
_asm
__asm
もokなんですか?

543 名前:デフォルトの名無しさん :03/03/30 13:46
>>542

>>528 をよく読んでよく考えなさい

544 名前:デフォルトの名無しさん :03/03/30 14:09
542は>>540-541への返信

545 名前:デフォルトの名無しさん :03/03/30 14:13
後ろにアンダースコアを2つ付けてるYO。変数名・関数名にも普通に
アンダースコア使っているから1つだとどうにも目立たず。

546 名前:デフォルトの名無しさん :03/03/30 14:35
>>545
>>527

547 名前:デフォルトの名無しさん :03/03/30 14:41
>>545
うしろも駄目って事?「それを含む名前全部」てことだと n_files
みたいなのも駄目って意味にも取れるけど。

548 名前:547 :03/03/30 14:44
って違うね。>>527氏の言ってるのは _ から始まっていたら _hoge_
こういうのはだめだって意味じゃない? hoge_ hoge__ は問題ないと
思うんだけど。

549 名前:デフォルトの名無しさん :03/03/30 14:47
>>547
[17.4.3.1.2]
Each name that contains a double underscore ("__")
or begins with an underscore followed by an uppercase letter (lex.key)
is reserved to the implementation for any use.

550 名前:547 :03/03/30 14:57
>>549
引用さんくすです。なんだかややこしい規則だなあ・・・。つまり正確には
アンダースコア2個は前だろうと後ろだろうと駄目で、アンダースコアから
始まる場合は次の文字が大文字でなければいい、もしくは後ろにのみ付ける
分には問題ないということですか。

551 名前:デフォルトの名無しさん :03/03/30 14:57
ANSIの規則を書き換えると以下のようになる

規則1・アンスコで始まって、大文字またはアンスコが続く識別子は常に予約済み(全てのスコープ、全ての名名前空間で)
規則2・アンスコで始まる識別子はファイルスコープを持つ通常の識別し(関数、変数、typedef、列挙体定数)に対して予約済み

もし安全重視の側に立つのならアンスコで始まる名前を付けてはならない

しかし、次の例外を憶えて使っても良い
アンスコで始まって数字か小文字が続く識別子を構造体/共用体のメンバや、
関数・ブロック・プロトタイプスコープでつかっても良い

552 名前:デフォルトの名無しさん :03/03/30 15:03
つまりだ

int _a;//NG
void foo()
{
int _a;//OK
}

struct Foo
{
int _member;//OK
int _Member;//NG
};

553 名前:デフォルトの名無しさん :03/03/30 15:11
ずっと前から謎だったんだが、STLportの実装で使われている名前が全部
これらの「実装のために予約」された名前になっているのはどういうわけだ?

554 名前:547 :03/03/30 15:15
なるほど、単純に _ の後に小文字が続けばいいというものでは
ないってことですね。勉強になりますた。てか本当ややこしいな・・・。
後ろにのみアンダースコアは1個てのは、うまく網目掻い潜ってる
というか、そこまでしてアンダースコアを使うか、というか(w

555 名前:デフォルトの名無しさん :03/03/30 15:17
>>553
おれが思うにコードをわざと読みにくくしてるのでは?

556 名前:デフォルトの名無しさん :03/03/30 15:18
単なる思い上がりでしょう。

557 名前:デフォルトの名無しさん :03/03/30 15:29
正しく動くこととパフォーマンスと実装(コンパイラ固有の問題)を重視してるから、
規格を遵守することはさほど優先じゃないだけだろ。


558 名前:デフォルトの名無しさん :03/03/30 15:33
STLの実装者は'実装のために予約された名前'を使う対象には入らないの?

559 名前:デフォルトの名無しさん :03/03/30 15:36
>>558
まだ早い もうちょっと待て

560 名前:デフォルトの名無しさん :03/03/30 15:42
>>558
それの答えがどうであれ、ローカル変数にまで予約された名前を使う理由にはならん。

561 名前:デフォルトの名無しさん :03/03/30 15:51
>>551
構造体がありなら、クラスもありって解釈でいいかな。
だとすると…メンバに使える!!!(*゚∀゚)=3

どうなんだろ…。

562 名前:デフォルトの名無しさん :03/03/30 15:53
>>561
ややこしい規格を持ち出さないと説明がつかなくなるからやめとけ。

563 名前:デフォルトの名無しさん :03/03/30 16:12
typedef enum _E { HOGE0, HOGE1, HOGE2 } E;
int foo( E e ) {
    return (int)e;
}
なんでこのコードが VC++ で通らないのか、やっと解ったよ

564 名前:デフォルトの名無しさん :03/03/30 16:13
なんで?

565 名前:デフォルトの名無しさん :03/03/30 16:15
>>561
安全重視の側に立った方がいい

566 名前:デフォルトの名無しさん :03/03/30 16:32
最近それを知って _ をメンバの後ろに付けるよう矯正しますた。
最初は気持ち悪かったけど一日で慣れてしまった……。

567 名前:デフォルトの名無しさん :03/03/30 16:38
>>563
typedef enum E { HOGE0, HOGE1, HOGE2 } E;
こう書けばいいのに・・・・


568 名前:デフォルトの名無しさん :03/03/30 16:40
enum E {...};だけでイイだろ?

569 名前:567 :03/03/30 16:43
>>568
そうだ。ここC++スレだ。
Cならダメだだから。


570 名前:567 :03/03/30 16:43
「だ」が一つ多いし(鬱

571 名前:デフォルトの名無しさん :03/03/30 16:56
>>567
Cって、列挙体のタグ名とtypedefのタイプ名ってかぶってもいいの?

>>568
うん、とりあえず、そんな風に修正したの。
「typedefとenum定義って同時にしちゃ駄目なのかなぁ。
 VC++のバグかなぁ」
って思いながら...(←痛すぎ)

あ、いや、もともとCのコードを移植したものだったし、

572 名前:デフォルトの名無しさん :03/03/30 16:58
>>571
列挙も構造体も共用体もOK


573 名前:デフォルトの名無しさん :03/03/30 17:26
>>524


574 名前:デフォルトの名無しさん :03/03/30 17:55
>>573
スタック、ヒープで検索。

575 名前:デフォルトの名無しさん :03/03/30 19:02
>>574
ヒープより、フリーストアのほうがいいかも。

576 名前:デフォルトの名無しさん :03/03/30 19:42
質問してもいいですか?

577 名前:デフォルトの名無しさん :03/03/30 19:44
質問していいか質問していいですか?

578 名前:デフォルトの名無しさん :03/03/30 20:10
質問して良いかの質問なんてしないでください

579 名前:デフォルトの名無しさん :03/03/30 21:07
返答しないでください

580 名前:デフォルトの名無しさん :03/03/30 21:21
>>576-578
チョトワラタ


581 名前:デフォルトの名無しさん :03/03/30 22:20
template<typename T> void template_function(T){}
struct {} global_instance_of_unnamed_struct;
void f()
{
    template_function(global_instance_of_unnamed_struct);
}

こいつがコンパイルできてしまうのはバグですか?

582 名前:デフォルトの名無しさん :03/03/30 22:22
>>581
何でバグなの?

583 名前:デフォルトの名無しさん :03/03/30 22:30
これか?
[14.3.1]
-2- A local type, a type with no linkage, an unnamed type
or a type compounded from any of these types shall not be
used as a template-argument for a template type-parameter.


584 名前:名無しさん :03/03/30 23:11
 

585 名前:デフォルトの名無しさん :03/03/30 23:18
>>582
&の右の項がないから。

586 名前:デフォルトの名無しさん :03/03/30 23:18
 

587 名前:デフォルトの名無しさん :03/03/30 23:21
>>585


588 名前:デフォルトの名無しさん :03/03/30 23:24
>>587
もっと具体的に言うと、
&nbspのあとに、;が無いから。

...は!もしかしてwindowsだとふつうにみえるのか...

589 名前:デフォルトの名無しさん :03/03/30 23:28
ん〜?どれどれ?
 
 

590 名前:デフォルトの名無しさん :03/03/30 23:29
なるほど、そうなのか。

591 名前:デフォルトの名無しさん :03/03/30 23:35
WindowsつーかIEだな<実体参照の;がなくてもとおる。

592 名前:デフォルトの名無しさん :03/03/31 00:47
 

593 名前:デフォルトの名無しさん :03/03/31 07:56
C++の関数からCの関数を呼ぶときは、プロトタイプの前後に
__cplusplusなんとかってのをつけとけばいいけど、
逆にCからC++の関数を呼ぶときはどうすればいいの?

594 名前:デフォルトの名無しさん :03/03/31 08:06
C++の修飾名でcallする。

595 名前:デフォルトの名無しさん :03/03/31 08:06
手を挙げればいい

596 名前:デフォルトの名無しさん :03/03/31 08:13
C++でコンパイルする。

597 名前:デフォルトの名無しさん :03/03/31 08:16
COM+/DCOM

598 名前:デフォルトの名無しさん :03/03/31 08:30
>>596
ヘッダとライブラリしかない場合は?
C++の就職名でcallか〜?

599 名前:デフォルトの名無しさん :03/03/31 08:34
#include <stdio.h>

char *nanashi[6]={"逝ってよし","(・ё・)クサー","来るな","あっちいけ","吊れ"};
void main()
{

int i;

for (i=1;6<=i;i++)
{
printf ("デフォルトの名無しさん %d",nanashi[i]);
};
};


600 名前:デフォルトの名無しさん :03/03/31 08:39
>>599
配列の範囲を超えてしまう。

601 名前:600 :03/03/31 08:40
違う違う。
ループに一度も入らない。

602 名前:デフォルトの名無しさん :03/03/31 09:01
>>598
↓これでいける?

// cxx_tunnel.h
#if defined(__cplusplus)
extern "C" {
#endif
void c_func();
#if defined(__cplusplus)
}
#endif

// cxx_tunnel.cpp
#include "cxx_tunnel.h"
#include "cxx_lib.h"
void c_func(){ cxx_func(); }

// source.c
#include "cxx_tunnel.h"
void func(){ c_func(); }


603 名前:デフォルトの名無しさん :03/03/31 09:20
>>602
#ifdefにしろよ。

604 名前:デフォルトの名無しさん :03/03/31 11:30
>>603
#id defined() はANSI-Cから取り入れられた構文なので、
新しい人はこちらの方を好んで使う人もいる。

605 名前:デフォルトの名無しさん :03/03/31 12:08
正直、どうだっていい。

606 名前:デフォルトの名無しさん :03/03/31 13:28
つまらん間違いだけど
×#id defined()
○#if defined()

typoですた。

607 名前:Cスレの151 :03/03/31 21:46
Cスレで質問していたのですが、こちらにも流れてきました…
http://pc2.2ch.net/test/read.cgi/tech/1048995232/151-

C++なら、構造体の宣言は
struct Foo;
ですむので、関数の宣言でも
struct Foo;
void func(Foo *f);
というぐあいに、(実体を書かずに)宣言だけですませることができます。
これでコンパイル依存が減って作業がはかどります。

これをCでやるにはどうすればいいのでしょうか?
typedef strct { /* ... */ } Foo;
といったぐあいに他のヘッダでFooを定義しているときに
他のヘッダで
extern typedef Foo;
void func(Foo *f);
とできるのでしょうか?

タグ名を使って
extern struct Foo_tag;
void func(struct Foo_tag *f);
と冗長(?)にするの?なんかやだなぁ


608 名前:デフォルトの名無しさん :03/03/31 21:50
>>607
なぜC++のスレでCの質問をするのでしょうか。


609 名前:Cスレの151 :03/03/31 21:55
>>608
Cスレで質問したとき、どうも、コンパイル依存について
あまりふれられずに話が進んでしまっているようなので…

C++だったら、「Effective C++」の34項が
とても有名だと思うので、こちらでも質問させて
いただきました

これをC版のstructでするにはどうするのでしょうか?

610 名前:デフォルトの名無しさん :03/03/31 21:56
>>607
void foo(struct Foo *);

typedef struct Foo
{
int i;
} Foo;

void foo(struct Foo *f){}

はいどうですか?

611 名前:デフォルトの名無しさん :03/03/31 21:59
>>610
> void foo(struct Foo *);

Fooって何?そんなもの知らない。


612 名前:610 :03/03/31 22:01
>>611
? 何いってるのかわかりません?

613 名前:デフォルトの名無しさん :03/03/31 22:03
>>612
Fooの定義をする前にFooという名前を使ってはいけないだろ。
それとも上にまだ何かあるのか?

614 名前:デフォルトの名無しさん :03/03/31 22:04
>>609
CでやるならCの流儀に従え
いやならやめろ

615 名前:デフォルトの名無しさん :03/03/31 22:07
>>613
いえ、上には何も無いですよ

void foo(struct Foo *);
でsturct Fooと書いてあるからFooは構造体の名前だということがわかるため
前宣言はいらないと思っていたのですが・・・ひょっとして駄目なのですか?

616 名前:610 :03/03/31 22:08
ちなみにVC7ではコンパイルできます

617 名前:デフォルトの名無しさん :03/03/31 22:20
CでもC++でも関数引数内で型の定義は出来ない。
あらゆるユーザ定義型とユーザ定義型へのポインタ、参照は
それを別の宣言、定義で使用するまえに宣言しておかなければならない。

struct Foo;
void foo(struct Foo *);

で足りるんだからそうしとけ。

K&RでもARMでもなんでもいいから宣言と定義の項を悟りをひらくまで
読み続け呂。

618 名前:デフォルトの名無しさん :03/03/31 22:21
gccじゃどうやってもコンパイルできないが・・・

619 名前:610 :03/03/31 22:25
>>617
読みました、駄目みたいですね。
VCでコンパイルできるもんだから勘違いしてました。

struct Foo;
void foo(struct Foo *);

typedef struct Foo { int i; } Foo;

void foo(struct Foo *f){}

じゃあ、これで

620 名前:Cスレの152 :03/03/31 22:33
>>617

610さんと私で、ごちゃごちゃしてますが…(^^;

617さんは私におっしゃっているのでしょうか?

私は、宣言と定義について、勉強が足りないです。

614さんがCでやるならCの流儀で…とおっしゃってますが
やはりそうなのでしょうか…
タグ名を使うべきなような気がしてきました。
typedefはしない方が良さそうな…

621 名前:Cスレの151 :03/03/31 22:35
>>620
Cスレの151です。名前をまちがえました

622 名前:デフォルトの名無しさん :03/03/31 22:40
>>620
Cなら素直にtypedef使え。

623 名前:sage :03/03/31 22:40
いい加減スレ違いだからおわり

typedef struct tagFoo Foo;
void foo(Foo *);


624 名前:デフォルトの名無しさん :03/03/31 22:41
冗長なexplicitって無害?

625 名前:sage :03/03/31 22:42
本当にexplicitにしたいものがどれだか分からなくなるのが問題なら、有害。


626 名前:Cスレの151 :03/03/31 22:43
>>623
スレ違いが過ぎたようなので、終わります

たくさんアドバイスをしてくださって
どうもありがとうございました

627 名前:デフォルトの名無しさん :03/03/31 22:53
>>625
なるほど。
私は基本的に全部explicitにしたい派なので、その点については無問題です。
いままで引数を増やしたときはこまめにexplicitをはずしていましたが、
これからはつけっぱなしにしてみます。

628 名前:デフォルトの名無しさん :03/04/01 01:13
NULLを返す(ような)コンストラクタって作れますか?

A *a=new A();
if(a==NULL){
 puts("Aの作成に失敗");
}

ってなことをしたいのですが。

629 名前:sage :03/04/01 01:22
作れる。
昔はそんな感じだったがいまはstd::bad_allocを投げるのがお約束になってる。

例外じゃいかんのか?

630 名前:デフォルトの名無しさん :03/04/01 01:23
A *a=NULL; try{ a = new A(); }catch(...){}
if(a==NULL){
 puts("Aの作成に失敗");
}


631 名前:デフォルトの名無しさん :03/04/01 01:25
#include <new>
A *a=new(std::nothrow) A();
if(a==NULL){
 puts("Aの作成に失敗");
}


632 名前:sage :03/04/01 01:27
>>631ソレしらんかった hmm

633 名前:デフォルトの名無しさん :03/04/01 01:30
Aのコンストラクタがエラーになったときの処理とちがうんかいな?

634 名前:sage :03/04/01 01:37
だったら適切なfactoryを一個つくりゃいいんじゃないの?
無理にじかにnewしなくとも

635 名前:628 :03/04/01 01:49
みなさん回答どうもありがとうございます。

>>629
作れるんですか?よろしければ作り方教えていただけると助かります。
コンストラクタに渡した引数の値がおかしいときとかに
newを失敗させるってことをしたいんです。
foo(new A()); みたいなこともしたいので、できれば例外処理は使いたくないです。

636 名前:628 :03/04/01 02:08
factoryっていうのは

A *CreateA(){ ... }
A *a=CreateA();

こんなものでしょうか。(googleで調べたけどfactoryの意味わからんかったです)
これだとなんだか悔しいんですが。


637 名前:デフォルトの名無しさん :03/04/01 02:16
改行コードがLFCRCRのテキストファイルを
読み込みたいんですが、どういう方法がいいのでしょうか?

たとえばABC\n\r\rDEF\n\r\rというテキストファイルを
std::list<string>に改行コードなし文字列を
行ごとに格納していきたいのですが
getline()関数でデリミタ文字を\rを指定すると
前後にLFとCRが残ってしまいます。
やっぱりgetline()を使わず
1文字ずつ読み込むのが妥当ですかね?

638 名前:デフォルトの名無しさん :03/04/01 02:34
>>636
A* new_A() { try{ return new A(); }catch(...){ return 0; } }

foo(new_A());

うん。そっくり。

639 名前:デフォルトの名無しさん :03/04/01 03:09
>>637
std::getline()はデリミタに'\0'を指定して一度に全部読み込め。

int main()
{
std::stringstream file("\n\r\rabc\n\r\rdef\n\r\r");
std::string str;
std::list<std::string> ls;

std::getline(file, str, '\0');

while (true) {
std::string::size_type n = str.find_first_of("\n\r\r");
if (n == std::string::npos) break;
if (n) ls.push_back(str.substr(0, n));
str.erase(0, 3);
}
std::list<std::string>::const_iterator pos;
for (pos = ls.begin(); pos != ls.end(); ++pos)
std::cout << *pos << std::endl;
}

640 名前:デフォルトの名無しさん :03/04/01 03:14
>>639
ああこれやと行末に\n\r\rがないとおかしくなるなあ。直そ。

641 名前:デフォルトの名無しさん :03/04/01 03:19
こんなもんやないかな。

int main()
{
std::stringstream file("\n\r\rabcd\n\r\rdef\n\r\rghi");
std::string str;
std::list<std::string> ls;

std::getline(file, str, '\0');

while (true) {
if (str.length() == 0) break;
std::string::size_type n = str.find_first_of("\n\r\r");
if (n == std::string::npos) n = str.length();
if (n) ls.push_back(str.substr(0, n));
str.erase(0, n + 3);
}
std::list<std::string>::const_iterator pos;
for (pos = ls.begin(); pos != ls.end(); ++pos)
std::cout << *pos << std::endl;
}

642 名前:デフォルトの名無しさん :03/04/01 03:38
>>641
ありがとうございました
おかげで何とかなりそうです
自分のファイル入出力にくっつけて検証したいと思います

643 名前:デフォルトの名無しさん :03/04/01 03:44
>>641
find_first_ofでいいのか?

std::list<std::string> f( std::istream& source , const char delimiter[] )
{
std::string all;
std::getline( source , all , '\0' );
std::list<std::string> lines;
if( !all.empty() )
{
std::string::size_type pos = 0;
do {
const std::string::size_type start = pos;
pos = all.find( delimiter , start );
lines.push_back( all.substr( start , pos ) );
} while ( pos != std::string::npos );
}
return lines;
}


644 名前:643 :03/04/01 04:03
自己申告。
>>643もダメ。

645 名前:デフォルトの名無しさん :03/04/01 04:13
こんなのはどうだろう
std::string str = "ABC\n\r\rDEF\n\r\rGHI\n\r\rJKL";
std::list<std::string> strlst;
std::string::size_type begpos = 0, endpos;

while ((endpos = str.find("\n\r\r", begpos)) != std::string::npos) {
 strlst.push_back(str.substr(begpos, endpos - begpos));
 begpos = endpos + 3;
}
if (begpos != str.length() - 1) {
 strlst.push_back(str.substr(begpos));
}


646 名前:637 :03/04/01 04:19
void main()
{
std::ifstream stream;
char rBuffer[6555];
std::string str;
std::list<std::string> ls;

stream.rdbuf()->pubsetbuf(rBuffer, sizeof(rBuffer) / sizeof(char) );
stream.open("LFCRCR.txt", std::ios::in | std::ios::binary );

while (!stream.eof()) {
std::getline(stream, str, '\n');

std::string::size_type n = n = str.length();
if (n > 2)
ls.push_back(str.substr(2, n));
}

stream.close();

std::list<std::string>::const_iterator pos;
for (pos = ls.begin(); pos != ls.end(); ++pos)
std::cout << *pos << std::endl;
}

どうしても何百MBのテキストファイルを読み込むのに
毎行検索すると速度的に非常に遅くなるので
改行コードは必ずLFCRCRが来ると決めうちして
こんな感じに読み込むとそこそこ速度が出ました
急造なんで問題は多分ありますけど

647 名前:637 :03/04/01 04:25
非常に危険をはらんだコードのような気もします
とりあえずお休みなさい
ありがとうございました

648 名前:デフォルトの名無しさん :03/04/01 06:47
std::istream& getline_for_637(std::istream& src, std::string& dst, const char* delimiter) {
std::istream::sentry k( src, true );
if( k ) {
dst.clear();
const char* comparing = delimiter;
for( std::istreambuf_iterator<char> cur(src), end ; cur != end && *comparing != '\0' ; ++cur ) {
const char c = *cur;
if( c == *comparing ) {
++comparing;
} else {
if( comparing != delimiter ) {
dst.insert( dst.end() , delimiter , comparing );
comparing = delimiter;
}
dst.push_back( c );
}
}
if( *comparing != '\0' ) {
src.setstate( std::ios::eofbit );
dst.insert( dst.end(), delimiter, comparing );
if( dst.empty() ) {
src.setstate( std::ios::failbit );
}
}
} else {
src.setstate( std::ios::failbit );
}
return src;
}


649 名前:デフォルトの名無しさん :03/04/01 11:52
>>643
スマソ。find_first_of()ではまずいやね。
Cで言うとstrcspn()やからね。
find()がstrstr()に該当するから、find_first_of()は使わないでくだされ。

650 名前:デフォルトの名無しさん :03/04/01 14:28
COleVariant に文字列をCHAR型の文字を代入するにはどうすればいいのですか?


651 名前:デフォルトの名無しさん :03/04/01 17:35
COleVariantて何ですか?

652 名前:デフォルトの名無しさん :03/04/01 19:23
質問お願いします。VC6では通る、以下のようなコードは
やはりSTLの実装依存になってしまうのでしょうか?
vectorは内部的に、その型の配列である…というのが保証されていると良いのですが…。

#include <vector>
#include <iostream>

void func( int* array, int num_array ){
 for(int i=0; i<num_array; ++i)
  std::cout << array[i] << std::endl;
}

int main(){
 std::vector<int>vec;
 vec.push_back(1);
 vec.push_back(777);
 vec.push_back(1000);
 func( &vec.at(0), vec.size() );
 return 0;
}

653 名前:デフォルトの名無しさん :03/04/01 19:40
>>652
BCCでも通りますが何か

654 名前:デフォルトの名無しさん :03/04/01 19:42
>>653
VC7では通らないんだよね。

655 名前:デフォルトの名無しさん :03/04/01 19:45
>>652
> func( &vec.at(0), vec.size() );

この方が、わかりやすいかと。(Effective STL 16項)
func( &vec[0], vec.size() );

656 名前:デフォルトの名無しさん :03/04/01 19:49
>>653 >>654
レスありがとうございます。やはり無理なんですね。

実際にはfuncの部分が、こちらではいじれないライブラリなので、
残念ながらvectorの使用を諦めなければになりそうです。

…また可変長配列手書きの時代に巻戻り…残念です。
それとも仕様が変わりそうにない、他のSTLを使えばいいのかな…。

657 名前:655 :03/04/01 19:51
>>655じゃだめなのか? 自分で言うのも何だが。
VC++なんて、窓から投げ捨てろ!

658 名前:652=656 :03/04/01 19:52
と、書いている間に…

>>655
や、本当だ。分かりやすいです。
というか…Effective STLに載っていると言うことは、
常套手段として認められているのでしょうか!

ちぃ、手元にその本がみつからず…これからちと探してきます。
これは期待です。有益な情報ありがとうございました。

659 名前:デフォルトの名無しさん :03/04/01 19:53
>>656
一番安全なのは、配列同様の配置を保証した、
偽vectorを自前で実装することでは。
で、必要なときはそのヘッダファイルを使い回すと。

660 名前:デフォルトの名無しさん :03/04/01 20:42
どうしてあそこまで実装にこだわった標準が「vectorの中身が配列」
というのを保証しなかったんだ?あと「stringはcopy-on-write
だからコピー・代入で例外を投げない」というも。
今更言ってもしょうがないけど。

661 名前:デフォルトの名無しさん :03/04/01 20:44
>>652
もうEffectiveSTLの該当する項を読んだりしてるかもシレンが、
最近の修正で、「&vec[i] == &vec[0] + i でなければならん」と
規格に定められた。ので、問題ないはず。既に世に出てるコンパイラで
こうなってないものも特に無いようだし。

662 名前:デフォルトの名無しさん :03/04/01 20:51
>>660
> stringはcopy-on-write だからコピー・代入で例外を投げない
vectorの方はともかく、こっちはCOWでない実装も相当たくさん
存在するのだが。特に独自にthread-safetyを保証しようとしたりすると。

663 名前:デフォルトの名無しさん :03/04/01 21:22
>>660 単に漏れただけ。


664 名前:658 :03/04/01 21:27
>>659
仰るとおりで、先ほどまで私も、昔自作したtemplateを前にため息ついてました。
>>660
激しく同意です。その一文がこれまでにもあれば…。
>>661
うほっ!良い規格!いや素晴らしい情報です。修正入ったんですねぇ…。
嬉しすぎです。当方、もう二度と配列なんて定義しなそうな勢いです。

お礼が遅くなってすいません、20時にしまる書店へ裸足で飛び出したもので…
皆様レスありがとうございました。深く感謝です。

665 名前:デフォルトの名無しさん :03/04/02 04:38
定数をクラスの外部に見せずに
宣言する方法はないでしょうか?
例えば、

#include "Base.h"

const int BUFFERSIZE = 10;

class Derived : public Base
{
 Derived( int size = BUFFERSIZE );
 ~Derived();
 // 〜
};

と言う風に宣言したとき、もし"Base.h"でも
BUFFERSIZEと言う定数が同様に宣言されていたら
コンパイルエラーになってしまいます。

includeするヘッダファイルにすでに同名の
定数が宣言されているかどうかを調べて、
衝突しない名前を考えるのが面倒なので、
同名の定数を宣言できる方法があれば
うれしいのですが、そんな方法はないでしょうか?

666 名前:デフォルトの名無しさん :03/04/02 04:50
クラス内に書く

667 名前:sage :03/04/02 06:59
整数型なら"enumハック"でぐぐれ

668 名前: ◆hMJAPH9PWA :03/04/02 11:39
>>665
namespaceを使えばいいのでは。

669 名前:デフォルトの名無しさん :03/04/02 14:27
                \ │ /
                 / ̄\   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
               ─( ゚∀゚  )< ぬるぽぬるぽぬるぽ!!
                 \_/   \_________
                / │ \
                    ∩ ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚ )< ぬるぽぬるぽぬるぽ!!
ぬるぽぬるぽ!!   >(゚∀゚ )/ |    / \__________
________/ |    〈 |   |
              / /\_」 / /\」
               ̄     / /


670 名前:デフォルトの名無しさん :03/04/02 14:29
namespaceって何だっけ?

671 名前:デフォルトの名無しさん :03/04/02 15:04
>>670
入門書読め。

672 名前:デフォルトの名無しさん :03/04/02 15:13
usingって何だっけ?

673 名前:665 :03/04/02 15:14
>>666
クラス内に書くと、純粋仮想関数の記述が間違っている、
といったエラーになってしまいます。(VC++にて)

>>667
なるほど。enumでうまくいきますね。
整数型という限定がありますが。

>>668
"namespace"で検索してみました。
こんな便利な仕組みがあったんですね。
(わたしがC++の勉強に使った書籍には
namespaceの説明はありませんでした)
これだと整数型以外でも使えますね。

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

674 名前:デフォルトの名無しさん :03/04/02 16:16
cl.exe は static const を純粋仮想関数とかほざいて
受け付けてくれないからねえ・・・

675 名前:デフォルトの名無しさん :03/04/02 16:17
そんな古い本は窓から投げ捨てなさい。

676 名前:デフォルトの名無しさん :03/04/02 16:22
VC++7だとうまくイったな。

677 名前:デフォルトの名無しさん :03/04/02 19:15
ANSI以前のC++にはなんの価値もないからなあ。
CにはK&Rみたいなのがあるけど、C++にはそういった
ものがない。古い本は焚書だよ。

678 名前:デフォルトの名無しさん :03/04/02 21:25
テンポラリーな int のアドレスって作れますか?

void foooooo( int* pi ){}

foooooo( &int( 0 ) );

みたいな。
実際には上のコードはエラーが出ます。

679 名前:デフォルトの名無しさん :03/04/02 21:27
C:広辞苑
C++:現代用語の基礎知識

680 名前:デフォルトの名無しさん :03/04/02 22:42
>>678
struct Int
{
int i;
int *operator&(){ return &i; }
};

void foo(int *){}

foo(&Int());

注意事項 絶対に使うな!

681 名前:デフォルトの名無しさん :03/04/02 23:08
早い話、山椒で受け取るようにすればいいわけで・・・

682 名前:デフォルトの名無しさん :03/04/02 23:12
>>678
なぜこんなことをする必要がある

683 名前:デフォルトの名無しさん :03/04/02 23:28
あ、わかった。Win32のReadFileやWriteFileで使いたいんだな?

684 名前:デフォルトの名無しさん :03/04/03 00:57
int i = 5;
my_cout << i
で、
i = 5 ってやりたいんですが(つまりi=を書く手間を省略したい)いい方法って無いですか?


685 名前:デフォルトの名無しさん :03/04/03 00:59
my_cout << 5

686 名前:デフォルトの名無しさん :03/04/03 06:53
>>684
シンボル名は実行時には通常取得できないので
Cスタイルマクロ使うしかない。
#define NAME_AND_VAL(a) (#a << " = " << (a))
とか定義して
my_cout << NAME_AND_VAL(i);
とか。

687 名前:デフォルトの名無しさん :03/04/03 10:07
struct A{
 virtual void hoge() = 0{ }
};

これってVC6で通るんだけど、正しい構文なんですか?
規格には、
virtual void hoge(){} = 0;
は駄目ってあって確かにこれは駄目だけど・・・

688 名前:デフォルトの名無しさん :03/04/03 11:50
>>687
通常は抽象基底クラスの関数は外部で宣言しないとエラーになる。
また抽象基底クラスの自体は直接インスタンスを生成できないだけで、
間接的に継承された子クラスから呼び出すことはできる。

#include <iostream>

struct A {
virtual void func() = 0;
};

void A::func() { std::cout << "A::func()" << std::endl; }

struct B : public A {
void func() { std::cout << "B::func()" << std::endl; }
void func2() { A::func(); }
};

int main()
{
B* b = new B;

b->func();
b->func2();

delete b;
}

689 名前:678 :03/04/03 13:30

foooooo( int* ) は自作関数ではないので、
受け取りを書き換える事は出来ません。

struct, class で wrap するつもりはありません。
どうやらテンポラリーは無理みたいなので諦めました。

どうもありがとう

class Int
{

public:
   Int( int i ){ m_int = i; }

private:
   int m_int;

public:
   operator int() const { return m_int; }

};

foooooo( &Int( 0 ) );
foooooo( &Int( 1 ) );
foooooo( &Int( 2 ) );
foooooo( &Int( 3 ) );


690 名前:sage :03/04/03 14:12
>>689
よくわからんが

int x;
foooooo(&(x=0));
foooooo(&(x=1));
foooooo(&(x=2));
foooooo(&(x=3));

じゃだめなのか?

691 名前:デフォルトの名無しさん :03/04/03 14:22
>>688
ありがとうございます。純粋仮想関数でも定義できるんですね。
こうしておくと、あるクラスでの仮想関数オーバーライドにおいて、
(直下の)基底クラスの仮想関数が純粋かどうか気にする必要がなくなりますね。


692 名前:デフォルトの名無しさん :03/04/03 19:37
auto_ptrの一時オブジェクトって、どうやってコピーしているの?
例えば
auto_ptr<int> foo() {
  auto_ptr<int> ap;
  return ap;
}
void bar() {
  auto_ptr<int> ap2 = foo(); // *1
}
という場合、gcc3.2で試してみると、fooの戻り値の一時オブジェクトを
auto_ptr_refに変換して、それからap2のコンストラクタを呼んでいる
ようなんだけど、これって暗黙のユーザー定義変換を2回実行している
ことにならない?*1の行が
  auto_ptr<int> ap2(foo());
なら分かるんだけど。

693 名前:デフォルトの名無しさん :03/04/03 22:28
暗黙の型変換はauto_ptrからauto_ptr_refの1回だろ?

694 名前:692 :03/04/03 22:43
>>693
auto_ptr_refからauto_ptrへの変換も暗黙の型変換だと思うけど。
struct hoge {};
struct moge {
  moge();
  moge(const hoge &) {};
};
struct fuga {
  fuga();
  fuga(const moge &) {};
};
int main() {
  fuga f = hoge();
  return 0;
}
ってやったらエラーになる。

695 名前:デフォルトの名無しさん :03/04/03 23:05
>>692
>auto_ptr<int> ap2 = foo();
>auto_ptr<int> ap2(foo());

これらは同じ意味

696 名前:デフォルトの名無しさん :03/04/03 23:08
>>695 ダウト

697 名前:デフォルトの名無しさん :03/04/03 23:09
「ヘキサゴン」て言おうよ

698 名前:デフォルトの名無しさん :03/04/04 00:28
>>696
おれも同じだと思ってた。違うの?

699 名前:sage :03/04/04 00:46
上はデフォルトコンストラクタのあとで代入演算子のオペレータ(があれば)を呼び出す。
下はパラメータ付きコンストラクタを呼び出す。

ほとんどの場合において求める動作と結果が同じなので、
上の書き方がされていたとき、下と同じ処理をしてもよいと、規定されてる。

同じ動作を意図して書かれる場合もあるが、デフォルトコンストラクタの
処理コストが大きい場合には、同じ動作にならずに困ることもある。

700 名前:693 :03/04/04 00:55
>>692
やっとみつけた。

えー、まずは、
T x = a; // copy-initialization
T x(a); // direct-initialization
と呼ぶそうだ。

[8.5 -14-]
If the initialization is direct-initialization, or if it is copy-initialization
where the cv-unqualified version of the source type is the same class as,
or a derived class of, the class of the destination, constructors are considered.

ってことで、direct-initializationか、またはcopy-initializationで
且つ初期化する型が初期化子の型とcv修辞子を除いて同じ場合
コンストラクタによる初期化を検討する、ってことらしい。

「初期化する型が初期化子の型とcv修辞子を除いて同じ場合」のみ、
copy-initializationとdirect-initializationは同じ意味になる。

auto_ptrの場合は、auto_ptr_refからの変換コンストラクタを、
auto_ptrからauto_ptr_refへのユーザー定義変換1回で
呼び出すことができるので、これで決定となる。

お、>>698もこれで解決?

最近規格書漁りが多いなぁ。

701 名前:デフォルトの名無しさん :03/04/04 00:58
何だか explicit らへんの話も分からなくなってきた。

>auto_ptr<int> ap2 = foo();
これは
>auto_ptr<int> ap2(foo());
これの書き方を変えただけのものだと思ってたんですが、そうでは
ないということでしょうか。

702 名前:デフォルトの名無しさん :03/04/04 00:59
>>699
1行目が激しく間違っているようだが。

703 名前:700 :03/04/04 01:00
>「初期化する型が初期化子の型とcv修辞子を除いて同じ場合」のみ、
>copy-initializationとdirect-initializationは同じ意味になる。
ああなるほど。

704 名前:703=701 :03/04/04 01:01
700はおれじゃなかった。

705 名前:デフォルトの名無しさん :03/04/04 02:06
Drectxを使ってフルスクリーンモードで描写しながら
DialogWindowを表示したいのですが
どのようにすればよいでしょか?

706 名前:デフォルトの名無しさん :03/04/04 02:08
DirectXって何ですか?DialogWindowって何ですか?

707 名前:デフォルトの名無しさん :03/04/04 02:15
間違えました。
DirectX
Dialog box
でした。

708 名前:4 :03/04/04 02:27
>>108
んー。調べてみます。
入力を見せないで、入力されたものを吐くプログラムをつくって
それをpipeで繋いでうまくできるかもしれません。

709 名前:707 :03/04/04 02:35
他板で教えてもらえました。
迷惑かけてすんませんでした。

710 名前:デフォルトの名無しさん :03/04/04 03:40
Standard C++ Library クラスリファレンス
http://www-scc.tokyo.jst.go.jp/riyou/users/users_guide/ucoma/FJcompiler/C++/stdlib/stdref/
この間からつながらなくなった。どっかに移動した?

711 名前:710 :03/04/04 03:54
Solaris のが生きてた。
ttp://www.mmm.muroran-it.ac.jp/guide/unix/C++/stdlib/stdref/

712 名前:デフォルトの名無しさん :03/04/04 04:19
Exceptional C++で質問です。
項目22のBasicProtocolって言うクラス作る必要あるんですか?
解答ではメンバにしろって書いてあるみたいですが。
関数だけのクラスならクラスにくくらず関数だけ書いて、
Protocol1、Protocol2で呼べばいいと思いますが?


713 名前:sage :03/04/04 07:12
もっと易しい本から嫁

714 名前:デフォルトの名無しさん :03/04/04 08:47
>>712
そのクラスが関数だけである、とどこに書いてある?
追加のメンバがあるかもしれないが云々...とは書いてあるが。

仮に全部フリー関数だけだったとしても、MessageHelperオブジェクトと
いう一つの実体としてくくる設計はアリだろう。

715 名前:デフォルトの名無しさん :03/04/04 12:50
すいません引越し直後でネットがつながらないので携帯から失礼します
コードのコの字も分からない人間ですがC++を始めたいと思います
今書店にいるのですが教本が多過ぎてどれが良いのか分かりません
まず一冊これを買えという定番があれば教えて頂けないでしょうか

716 名前:デフォルトの名無しさん :03/04/04 12:56
>>715
>コードのコの字も分からない人間ですがC++を始めたいと思います

あー、そう。
君は晴比古の本でいいよ。

717 名前:デフォルトの名無しさん :03/04/04 13:00
宣伝発見

718 名前:デフォルトの名無しさん :03/04/04 13:00
>>716
ありがとうございます
探してみます

719 名前:デフォルトの名無しさん :03/04/04 13:01
>>716は晴比古

720 名前:デフォルトの名無しさん :03/04/04 14:22
>>715
オライリーシリーズをお薦め

721 名前:デフォルトの名無しさん :03/04/04 15:03
>>715
日経ソフトウェアのムック『ゼロから学ぶC++』とかは?
あと『独習C++』とか

722 名前:デフォルトの名無しさん :03/04/04 15:21
>>720-721
なるほど
晴比古という方の本がまだ見つからないので
合わせて探しに新宿に行ってきます
ありがとうございます

723 名前:デフォルトの名無しさん :03/04/04 15:23
iostreamで、ディスクエラーなどでI/O自体が失敗した時は、
どういう振る舞いになるのですか?eof?bad?

724 名前:デフォルトの名無しさん :03/04/04 17:12
>>722
マジにとるなよ。
晴比古というのはダメな参考書を書いている人だから
絶対に買うな。あと三田とか岩谷とかも避けるように。

725 名前:デフォルトの名無しさん :03/04/04 17:30
晴比古本でも、「新C++言語入門シニア編(上・下)」は、
最新の ANSI C++ の規格にそって書いてあるから、
他の入門書よりもずいぶんマシだと思うが。
初心者には最適だと思うぞ。
~~~~~~~

ビギナー編はダメダメだが。


726 名前:デフォルトの名無しさん :03/04/04 18:03
C++いきなりやる香具師は必ず失敗する。
C++やるには、アセンブラ・Pascal・C必ず一通り齧らなければ
モノにならんでしょ。
C#なら、いきなりこれから初めても大丈夫みたいだけど。
大した違いは無いような感じだけど意外な差があるのが言葉の世界

727 名前:デフォルトの名無しさん :03/04/04 18:11
いやいや、別に良ーんでないの?

728 名前:デフォルトの名無しさん :03/04/04 21:27
ポインタをdeleteした後にはNULLを代入した方がいいのですか?
なぜですか?

729 名前:デフォルトの名無しさん :03/04/04 21:31
>>728
0を代入しておくと、間違ってdeleteしても無視されるから。

730 名前:デフォルトの名無しさん :03/04/04 21:32
そのせいで間違ってdeleteしているバグが隠蔽される。

731 名前:デフォルトの名無しさん :03/04/04 21:33
ありがとうございます。
じゃ、デストラクタの中などでdeleteする時はほっといてもいいんですね。

732 名前:デフォルトの名無しさん :03/04/04 21:37
あの〜スミマセン!!
MassageBoxの出し方教えて下さい。
ガッコウの兄貴に指示されました。
コニチワ、マッサージボックスで出せなさいと。
どうすればいい?


733 名前:sage :03/04/04 21:40
std::cout << "MessageBox";

734 名前:デフォルトの名無しさん :03/04/04 21:43
#define MassageBox MessageBox

735 名前:デフォルトの名無しさん :03/04/04 21:44
>>732

www::google << "MessageBox";

736 名前:デフォルトの名無しさん :03/04/04 21:44
732はマルチです。

737 名前:デフォルトの名無しさん :03/04/04 21:49
いくら必死でもマルチはいかんな。
それとも釣りかな。

738 名前:デフォルトの名無しさん :03/04/04 21:54
すみません質問してもよろしいでしょうか?

CSVファイルを読み込む
      ↓
中の値を全て2倍にする
      ↓
処理した値をCSVファイルとして出力

というプログラムをC++で組みたいと
考えているのですが、どのような
アルゴリズムを使用すればよいか、
ヒントでもよいので回答していただけないでしょうか?

739 名前:いつでもどこでも太郎さん :03/04/04 21:55
すみません。初心者です。
C++で、一定時間ごとに、画面をキャプチャするなんていうアプリを作れるのでしょうか?

740 名前:デフォルトの名無しさん :03/04/04 21:55
2倍するところは、2を掛ければよさそうだな

741 名前:デフォルトの名無しさん :03/04/04 21:56
初心者はまずできることからやろうよ。

742 名前:デフォルトの名無しさん :03/04/04 22:19
掛け算は「×」でなく「*」、、と。

743 名前:デフォルトの名無しさん :03/04/04 22:20
>>739
最近マルチ多いな

744 名前:デフォルトの名無しさん :03/04/04 22:21
C++のこんな感じのサイトありますか?
http://java.sun.com/j2se/1.4/ja/docs/ja/api/index-files/index-1.html

745 名前:デフォルトの名無しさん :03/04/04 22:22
なんでテンキーには「*」がないんですか?

746 名前:デフォルトの名無しさん :03/04/04 22:23
>>744
いくらでもある。

747 名前:デフォルトの名無しさん :03/04/04 22:35
>>745
残念だが私のテンキーにはある

748 名前:デフォルトの名無しさん :03/04/04 22:46
>>747
いや、ないはずだ。よく見ろ。

749 名前:デフォルトの名無しさん :03/04/04 22:48
ほんとだ。
若干形が違った。


750 名前:744 :03/04/04 23:03
>>746
レスありがとうございます。
アドレスを教えてくださいませんでしょうか?


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