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


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

C++相談室 part9
1 名前:デフォルトの名無しさん :02/07/22 23:26
現在最高のプログラム言語と言われるC++についてのご相談承ります。
(´∀`).。o(関連URLは>>2-5の辺り)

2 名前:デフォルトの名無しさん :02/07/22 23:27
C++ Final Draft International Standard
http://www.kuzbass.ru/docs/isocpp/

Boost
http://www.boost.org/
STLport
http://www.stlport.org/
Loki
http://www.moderncppdesign.com/

過去ログ
Part1
http://piza.2ch.net/tech/kako/980/980175292.html
Part3
http://pc.2ch.net/tech/kako/1003/10038/1003832761.html
Part4
http://pc.2ch.net/tech/kako/1009/10090/1009071535.html
Part5
http://pc.2ch.net/tech/kako/1014/10142/1014217496.html
Part6
http://pc.2ch.net/tech/kako/1018/10184/1018454705.html
Part7
http://pc.2ch.net/test/read.cgi/tech/1021787032/
Part8
http://pc3.2ch.net/test/read.cgi/tech/1025010364/

3 名前:デフォルトの名無しさん :02/07/22 23:31
Part2
http://pc.2ch.net/tech/kako/996/996640937.html

4 名前:デフォルトの名無しさん :02/07/22 23:31
(゚∀゚≡゚∀゚)

5 名前:デフォルトの名無しさん :02/07/22 23:33
ISO/IEC 14882 International Standard
http://www.kuzbass.ru/docs/ansi_iso_iec_14882_1998.pdf

6 名前:デフォルトの名無しさん :02/07/22 23:34
スレ建ておつかれー

7 名前:デフォルトの名無しさん :02/07/22 23:35
( ゚ペ)ノ オナーニな1行目ですな

8 名前:デフォルトの名無しさん :02/07/22 23:35
■関連スレ■

VisualC++相談室 3
http://piza2.2ch.net/tech/kako/993/993186053.html
VisualC++相談室 4
http://pc.2ch.net/tech/kako/1002/10021/1002165477.html
VisualC++相談室 5
http://pc.2ch.net/tech/kako/1006/10068/1006834463.html
VisualC++相談室 6
http://pc.2ch.net/tech/kako/1011/10116/1011615035.html
VisualC++相談室 【7】
http://pc.2ch.net/tech/kako/1017/10178/1017843192.html
VisualC相談室 【8】
http://pc.2ch.net/test/read.cgi/tech/1022499000/

C++Builder相談室
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=969458279
新C++Builder相談室(C++Builder相談室 Part2)
http://pc.2ch.net/test/read.cgi/tech/997074601/
C Builder相談室 Part3
http://pc3.2ch.net/test/read.cgi/tech/1016065855/

9 名前:モナ吉 :02/07/22 23:37
( ・∀・)ノ擂れさん御着かれー

10 名前:デフォルトの名無しさん :02/07/22 23:37
>>7
たまにはセンセーショナルな見出しをと思いました。

11 名前:デフォルトの名無しさん :02/07/23 00:22
C++は配列型の代入がないのが気持ち悪い
ぜんぜん最高じゃない

12 名前:デフォルトの名無しさん :02/07/23 00:25
>>11 vector

13 名前:デフォルトの名無しさん :02/07/23 00:26
>>11
配列のコピーって事?vectorを使えばいいじゃないか。

14 名前:デフォルトの名無しさん :02/07/23 00:27
>>12,>>13
ケコーンしようよ(w

15 名前:11 :02/07/23 00:30
ちがうちがう
typedef int inth[10][19] ;
inth a,b ;
とかやったら
a=bで要素の代入ができるべきだ!!
コピーできない組み込み型があるのは気持ち悪い

16 名前:デフォルトの名無しさん :02/07/23 00:31
>>15
それはC++の配列型が自分自身の大きさに関する情報を持たないため。
C言語との互換性を重視した結果です。

17 名前:デフォルトの名無しさん :02/07/23 00:31
何故出来ないのか?
その理由は


18 名前:デフォルトの名無しさん :02/07/23 00:34
配列型同士のコピーをしたいなら、構造体の中に配列を宣言して、
それ同士をコピーすればよい。って、こんなトリッキーなテクニック
はCだけで実行すべき。C++はコンテナがあるんだからそれを
使え。

19 名前:デフォルトの名無しさん :02/07/23 00:34
memcpy( a, b, sizeof(a));
みたいなことをしたらいいんでは?(C的発想)
ちょっと複雑なクラスになるとdieだけどなー

20 名前:11 :02/07/23 00:39
>>18
そうそうそれが言いたいんだよ
構造体につつめば出来るというのに
そのままだと出来ないのはおかしい!

配列渡しが見た目には値渡しなのに
強制的にポインタ渡しになって気持ち悪すぎ

21 名前:11 :02/07/23 00:42
やっぱりJavaが最高だね
C++キモイ

22 名前:>>1さん、センセーショナルな見出しはまずかったかモナー :02/07/23 00:45
>>11 boost::array ...

23 名前:デフォルトの名無しさん :02/07/23 00:46
やはりJava厨だったか..

24 名前:デフォルトの名無しさん :02/07/23 00:47
手元の資料の到着予定時刻と違う。ややフライング気味。

25 名前:デフォルトの名無しさん :02/07/23 00:48
Java厨は排他的だな(ワラ

26 名前:11 :02/07/23 00:48
>>21
だれ?
わたしはすでにC++&STL&Boostにどっぷり漬かってるから
いまさらC++から抜け出せない

>>22
あれは面白いね。あの初期化リストがふるくさい構文だと気づくまで
ちょっととまどったけど

27 名前:デフォルトの名無しさん :02/07/23 00:52
古くさい構文って?

28 名前:11 :02/07/23 01:00
構造体要素の初期化のこと
コンストラクタ呼び出しの初期化しかしなくなって久しいものだから

boost::array<int,4> a = { { 1, 2, 3 } };
みたいな。(マニュアルより)

29 名前:デフォルトの名無しさん :02/07/23 01:03
>>28
> コンストラクタ呼び出しの初期化しかしなくなって久しいものだから
「しか」って、・・・幸せな環境でやってんだな。

30 名前:11 :02/07/23 01:07
職業プログラマじゃないから当然!!

31 名前:29 :02/07/23 01:13
>>30
自分の基準で古臭いなんて言ってくれるなよ。
あの初期化が無かったら、すごく困る環境だってあるんだ。

32 名前:11 :02/07/23 01:17
まあまあ落ちつけ
あの初期化はあるんだから

33 名前:29 :02/07/23 01:28
貴様それでもあの初期化構文は古臭いと申すかっ?
トリアエズ、ゼンブアゲデカイテルオマエヨリハオチツイテイル

34 名前:11 :02/07/23 01:36
互換性のためだけにあるとしか思えないなあ
(見やすい)プロパティの初期化自体は必要だから
C99の指定初期化子のようなものを導入してほしいなあ
でもコンストラクタも併用できたほうがいいから
c++builderの__propertyみたいのもほしいなあ
C++の気持ち悪いものの一つだなあ

35 名前:29 :02/07/23 01:43
>>34
> 互換性のためだけにあるとしか思えないなあ
ROM環境ってやつでいまだに必要だ。
コンストラクタ通すとRAMに逝ってしまう。

36 名前:デフォルトの名無しさん :02/07/23 01:51
>>34
propertyはtemplateで作れよ

37 名前:11 :02/07/23 01:58
>>35
あ〜なるほど静的な初期化かあ
隙間なく初期化することしかできなくて
簡便なCの構造体初期化がむいてるわけかあ
しかしそういうところでC++を使うのかなあ

>>36
そういうことじゃなくてプロパティとして初期化を…
もしかしてできるのか?ちょっと調べてみる

38 名前:デフォルトの名無しさん :02/07/23 02:06
propertyクラスを作って代用しろってことだよ

39 名前:デフォルトの名無しさん :02/07/23 02:10
>>37で思ったんですが、

C++コンパイラとCコンパイラ、両方使える環境なら、
Cを選ぶ理由って何かありますか?
チームのスキルとかは、たぶんそれが現実的だけど、とりあえず無視するとしたら?

40 名前:11 :02/07/23 02:11
う〜やっぱりだめだった
当然だけどもpropertyクラスを作っても
プロパティとして振舞ってはくれない…
Bjarneなんとかしろ!!

41 名前:デフォルトの名無しさん :02/07/23 02:14
>Cを選ぶ理由って何かありますか?
無いに一票。

42 名前:デフォルトの名無しさん :02/07/23 02:14
転載。
たとえば、こんなの。
もう少し変更すれば、うまい具合に使える。

#include <stdio.h>

template<class T>
class property{
private:
void (*m_setter)(const T);
T (*m_getter)();
property(){;}

public:
property(void (*setter)(const T), T (*getter)() ){
m_setter = setter;
m_getter = getter;
}
~property(){;}

operator T(){
T dummy = (T)0;
if(m_getter)
dummy = m_getter();
return dummy;
}

T &operator=(T value){
if(m_setter)
m_setter(value);
return value;
}
T operator=( property<T> obj ){
*this = (T)obj;
return (T)*this;
}
};

int I;
void setI(const int i){
I = i;
}

int getI(){
return I*10;
}

void main(){
property<int> pi(setI, getI);
pi = 10;
pi = pi;
printf("%d", (int)pi );
}


43 名前:デフォルトの名無しさん :02/07/23 02:16
>Cを選ぶ理由って何かありますか?

何も無い。

44 名前:nanashin :02/07/23 08:17


VC.netでDLL開発をしています。
DLLのプロジェクトとそれを実行するプロジェクトの二つのプロジェクトを平行して開発しており、
どちらのプロジェクトでもdllのヘッダmydll.hをincludeしているのですが、
小クラスが大クラスのメンバでありかつdllから大クラスへのポインタをインポートしている時に
大クラスから小クラスのオブジェクトは見えるのですが、そこから小クラスのメソッドにアクセスしようとすると
未解決の外部シンボルというエラーが出てしまいます。どなたかアドバイスを・・・
具体的には

---------------mydll.h----------------------
myClass{
vector<mySubClass *> subs;
}

mySubClass{
void submethod()
.........
}

------------myProg.cpp--------------------
#include "mydll.h"

MYDLL_API myClass * class; //MYDLL_APIはvoid _delspec(dllimport) と同じこと
class->subs.at(0)->submethod();//????
submethod

SubClass:submethod()が未解決の外部シンボル・・・
というエラーになってしまいます。



45 名前:nanashin :02/07/23 08:52
自己レスです
大クラス直接クラス内のメソッドを
class->メソッドとしても未解決のシンボルになってしまいますね。
でも良く考えたら関数の中身がどこにあるかわからないので
そういう風になる気がしてきました。

なのでclassか関数かをdllexportすれば良かろうと思ったので
MYDLL_API 小メソッド::submethod

MYDLL_API mySubclass{....}
みたいにやって見たのですが、どちらもdllexportが許可されませんでした・・・

46 名前:nanashin :02/07/23 09:02
さらに自己レスです。とかなんとかやってたら
class MYDLL_API myClass{ ...}
でいいのですねMYDLL_APIの位置を間違えておりマシたので解決ヽ(´ー`)ノ

47 名前:デフォルトの名無しさん :02/07/23 13:06
>Cを選ぶ理由って何かありますか?

選ぶやつ(いるならば)に聞いてみてください

48 名前:デフォルトの名無しさん :02/07/23 14:20
>>39
1 移植性を重視する場合。(C++ の処理系、まだ C と比べると処理系間の差が
 大きいから)
2 既存のコードが C で書かれている場合。C++ にしても、あまり嬉しくない。
3 OS の API など、多くの環境で使うことを前提とするバイナリインターフェースを
 提供する場合。(ただし Windows に限って言えば COM や .NET があるから、
 C++ の方が逆に楽)
4 バイナリの大きさや、メモリ使用量の制約が厳しい場合。組込用の C++ 使うと
 いう選択肢はアリ。

でも C++ 使わない理由は、年々減ってると思うよ。

49 名前:すみません :02/07/23 20:08
VC++でDLLを作りました。
ソースの拡張子は cpp で、 __stdcall でエクスポートしています。

VC++でコンソールアプリのプロジェクト(HelloWorldアプリケーション)
を作成して作ったDLLをコールするサンプルプログラムを作りました。
うまくリンク出来ました。

VC++でコンソールアプリのプロジェクト(空のプロジェクト)を
作成して、メインのソースは、拡張子 .c としました。
プロジェクトをビルドすると、リンク時にLINK2001というエラーが
出て、DLL内の関数が見つからないと言われてしまいます。

DLL側がC++でコンパイルされていて、呼び出すメイン側が
Cでコンパイルされている事が原因のような気がするのですが、
解決方法がわかりません。

どなたか判る方いらっしゃいませんか?

50 名前:デフォルトの名無しさん :02/07/23 20:24
__declspec(dllexport)

51 名前:すみません :02/07/23 20:35
>>50
はい。
DLL側で自動作成されたヘッダファイルの中に、
#ifdef XXXXXX
__declspec(dllexport)
#else
__declspec(dllimport)
#endif
という感じのロジックが自動作成されています。

DLLを呼び出す側でもこのインクルードファイルを
インクルードしています。
但し、呼び出す側では、明示的に #define していないので、
__declspec(dllimport) が有効になっていると思います。

ここに何か追加しないといけないんでしょうか?


52 名前:デフォルトの名無しさん :02/07/23 20:51
extern "C" {
};
で宣言を囲む

53 名前:nanashin :02/07/23 22:24
extern "C"{
};
は入門書にそうなってたのでやってはいるが
良く意味がわからない・・・
C++ではなくCにするという意味なんだろうけど・・・

54 名前:デフォルトの名無しさん :02/07/23 22:36
>>53
C++では関数の多重定義などの機能を、リンカの重大な変更無しに実現する
ために、「名前マングリング」を行う。

これは、同一名の関数の名前に異なる名前を付加し、異なった関数として扱う
ための内部的テクニックであって、コンパイラによってその実現方法は異なる
ものの、リンカに変更を加えていない処理系では大同小異である。

どのように「名前マングリング」が行われるのか直に目で見たければ、ソース
のコンパイル結果をアセンブリ出力して、関数にどんなラベルがついているか
見ればよい。

extern "C" キーワードは、そのような「名前マングリング」を行わないことを
コンパイラに指示し、従来のCでコンパイルされたオブジェクトとのリンクを可能
にする。

55 名前:デフォルトの名無しさん :02/07/23 22:39
>>54
extern "C" キーワードは、そのような「名前マングリング」を行わないことを
コンパイラに指示し、従来のCでコンパイルされたオブジェクトとのリンクを可能
にする。

どうあがいてもDLLのエクスポート関数には妙なpostfix付いたりするけどね。

56 名前:デフォルトの名無しさん :02/07/23 22:44
>>55
それは呼び出し規約の整合を取るため、
MSのコンパイラが自分で規約を作っているだけ。
Borlandだとまた別だろ。

それから、DEFファイルで好みの名前でエキスポートできるよ

57 名前:デフォルトの名無しさん :02/07/23 22:44
>>55
そうそう、それで、VC++とBC++間のリンクが、extern "C"付けてもうまく
いかないことがあるみたい。

58 名前:デフォルトの名無しさん :02/07/23 23:17
>>57
そんなことはない。
VC++とBC++の間のリンクで問題があるのは、long doubleを使った場合や、他方の
ランタイムライブラリに依存した処理がある場合だけだと思うけど。


59 名前:デフォルトの名無しさん :02/07/23 23:23
>>57-58
どっちが正しいの?

60 名前:デフォルトの名無しさん :02/07/23 23:23
>>58
そうか・・・・実は他スレ
http://pc3.2ch.net/test/read.cgi/tech/1002377328/
で悩んでた奴がいるんだが、答えてやれなかった。

61 名前:デフォルトの名無しさん :02/07/23 23:27
57が正しい。
VCはstdcall規約だと名前の後ろに@xって付くけど、
borlandだと付かない

62 名前:デフォルトの名無しさん :02/07/24 00:00
58が正しい。
DEFファイルを使えば任意の名前でexportできる。

63 名前:デフォルトの名無しさん :02/07/24 00:04
>>62
非常に原始的だがね。
C++をあそこまで拡張したあげくにこのていたらく。

64 名前:デフォルトの名無しさん :02/07/24 00:48
>>62
extern "C"だけじゃうまくいかないって話じゃん。
DEFファイルを持ちだせば、__cdeclの関数もVBで使える名前に変えられちゃうし、
望むままにできちゃうじゃないか。

65 名前:デフォルトの名無しさん :02/07/24 01:01
ほ、ほ、保守!

66 名前:すみません :02/07/24 10:02
お礼が遅れてしまって申し訳ない。
昨日の夜、出来ました。
具体的には(自動作成されたマクロは展開して書いておきます)、
VisualC++のDLLでexportする関数は、
extern "C" __declspec(dllexport) long __stdcall func(long n);
extern "C" __declspec(dllexport) long __stdcall func(long n)
{
return n;
}
としておいて、DLLを作成し、
これをコールするC側では、
__declspec(dllimport) long __stdcall func(long n);
int main(int argc, char *argv[])
{
func(10);
return 0;
}
とすれば、C++で作成したDLLをCから呼び出すことが出来ました。

皆の衆THX

67 名前:デフォルトの名無しさん :02/07/24 12:07
おめでとう。

68 名前:デフォルトの名無しさん :02/07/24 13:12
質問があります。

struct Base {
 void func(void) {}
 Base(void) { func(); }
};

struct Derived : public Base {
 void func(int) {}
 Derived(void) { func(); } // Base::func()と書かないとダメ
};

上のように継承先でメンバ関数をオーバーライドした場合
"基底クラス::関数名"と書かないとコンパイルではじかれますが、
こうなる理由として積極的なものってあるんでしょうか?
というのは、引数から適切なメンバ関数を見つけるとすれば
上の場合はどこにも曖昧な点がない、つまりDerivedのコンストラクタで
指定したfunc()はBaseのfunc()だと一意に判ると思うのですが…。


69 名前:11 :02/07/24 13:28
プログラマのミスで引数にあやまりがあるのかどうかチェックするために
同名の基底クラスのメンバは隠蔽される。
さまざまなチェック機構はC++の開発支援の目玉の一つ。
おかげで文法が気持ち悪い。
(純粋仮想の)=0だとか(メンバ関数の)constだとか

70 名前:68 :02/07/24 14:15
>>69
ありがとうございます。納得しました。


71 名前:デフォルトの名無しさん :02/07/24 21:11
すみません、超初心者です。
Functionが3つ、まずはget_data functionでarrayに5つ整数をstoreして、
mainに戻り、mainでユーザーに任意の整数を入力してもらい、
その後、findnum functionでその整数がarrayの中にあるかどうか確かめる
というプログラムに四苦八苦してます。
findnumはpointerを使用しなければなりません。
  私が思うにfindnumでは、整数がarrayの中に見つかった場合、
arrayの何番目のデータがユーザーの入力した任意の整数と同じなのか
を返さなければならないので、pointerのaddress(&)を返さなきゃいけないと思うのですが、
どうもpointerの概念をちゃんと理解していないらしく、やり方がわかりません。



72 名前:71_main :02/07/24 21:14
#include <iostream.h>

void getdata(int []);
int findnum(int (*));

const int FAIL = 0;

void main(void)
{
int num[5];

cout << "Please input the five numbers\n ";
cout << "to store in the array.\n ";
cout << "After storing them in the array, \n";
cout << "this program will search the number.\n\n";

getdata(num);

int rc = findnum(num);

if(rc!=FAIL)
{
cout << "Found it\n\n";
} // End if
else
cout << "The program could not find the number.\n\n";

} //End of function main


73 名前:デフォルトの名無しさん :02/07/24 21:14
おいお前ら!ウインドウズプログラミングしてたら以下のようなエラーがでますた。
Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照)
どうすればいいんですか?教えてください(゚Д゚)ゴルァ!!

74 名前:デフォルトの名無しさん :02/07/24 21:17
>>73
-Wオプションをつけなかったから、WinMain()がメイン関数だと見なされて
ないだけだろう(゚Д゚)ゴルァ!!

75 名前:デフォルトの名無しさん :02/07/24 21:19
ちゃんとつけてるぞ(゚Д゚)ゴルァ!!


76 名前:71 :02/07/24 21:19
71です。続きです。

void getdata(int *Number[])
{
for (int i=0; i<5; i++)
{
cout << "Please input # ";
cout << (i+1) << " number : ";

cin >> (*Number)[i];

} // End of for
} // End of function getdata

int findnum(int (*no))
{
int value = 0;

cout << "Enter the number you search for : ";
cin >> value;

for (int i=0; i<5; i++, no++)
{
if (value == *no)
{
return (i);

} // End of if

return FAIL;
} // End of for


} // End of function findnum



77 名前:デフォルトの名無しさん :02/07/24 21:22
>>75
おかスィなあ。そのエラーは、いまだにC++コンパイラがmain()をメイン
関数だと思っちょるエラーだぞい。

78 名前:75 :02/07/24 21:23
bcc32 -W test.cppじゃなくて
bcc32 test.cpp -Wというようにしてた。
オプションのつけ方間違えた…
鬱打詩嚢


79 名前:デフォルトの名無しさん :02/07/24 21:29
mainを定義する

80 名前:デフォルトの名無しさん :02/07/24 21:31
>>79
それやると、ウィンドゥズプログラムとして動かないものが出来上がって
しまう。mainとWinMain両方定義しておけばいいけど。

81 名前:デフォルトの名無しさん :02/07/24 21:39
WinMain()なしでもWindowsプログラムを作る方法があるらしい。
main()中でGetModuleHandle(NULL)してインスタンスハンドルを得るらしい。
MozillaのwinEmbedで見た。
ttp://lxr.mozilla.org/mozilla1.0/source/embedding/tests/winEmbed/winEmbed.cpp


82 名前:デフォルトの名無しさん :02/07/24 21:40
話題につられて書いてしまったが、Windowsプログラムがどうこうというのは
スレ違いか?

…逝ってくる。


83 名前:デフォルトの名無しさん :02/07/24 21:47
>>81
なかなか面白いですね。スタートアップコードが本来処理する部分を
自分で書くわけですね。それでもまだマルチスレッド動作の時に大丈夫
かという不安は残ります。

>>82
http://pc3.2ch.net/test/read.cgi/tech/1018239290/ 当たりで書くと
喜ばれる話題かもしれません。

84 名前:デフォルトの名無しさん :02/07/24 22:43
main()からウィンドウ作るとコンソールも画面に残って嫌

85 名前:デフォルトの名無しさん :02/07/24 22:52
subsystemをconsoleからwindowsにすればいい。

86 名前:デフォルトの名無しさん :02/07/24 23:29
よくわかりました。

87 名前:デフォルトの名無しさん :02/07/25 02:50
int main()
{
main();
return 0;
}


88 名前:デフォルトの名無しさん :02/07/25 23:07
C++でprintfを使うのは良くないですか?
coutとか使いにくくてしょうがないのですが。

89 名前:デフォルトの名無しさん :02/07/25 23:09
>>88
いいんじゃないかな。


90 名前:デフォルトの名無しさん :02/07/25 23:12
>>88
慣れれば使いやすいよ それに便利

void Print(std::ostream &os)
{
 os << "プリントしたい中身を書く";
}
みたいなの作っておけば
Print(std:cout);はもちろん

std::ofstram of("hoge.txt");
Print(of); もできるし

std::ostringstream os;
Print(os); ともできる
printfとかじゃこんな事するのはめんどくない?
まぁ適材適所だと思いますけど

91 名前:デフォルトの名無しさん :02/07/25 23:12
v(^・^)v

92 名前:88 :02/07/25 23:23
レスありがとうございます。
まだ勉強中の身で生意気を言ってみたのですが…

適材適所。そうですね。
両方を選んで使えるようになる為、しっかり勉強します。
ただただ、楽な方に逃げるところでした。

93 名前:デフォルトの名無しさん :02/07/25 23:34
>>90
fprintf()

どっちかってーとクラスごとにoperator<<を定義してがすがす流すほうが利点じゃないか?

94 名前:名無しさん :02/07/25 23:49
>>93
禿同


95 名前:デフォルトの名無しさん :02/07/26 02:23
代入演算子の戻り値ってconst付ける?
俺は付けない方が正しいと思ってたんだけど、最近付けてるソースよく見る。

Foo& operator =(const Foo &bar);
const Foo& operator =(const Foo &bar);


96 名前:デフォルトの名無しさん :02/07/26 02:24
>>95
(a=3)=4;

97 名前:デフォルトの名無しさん :02/07/26 02:32
>>96
そう、俺もそれが根拠。
迷った時は組み込み型の真似。

でもじゃあなんでconst付けてる奴がいるの?


98 名前:デフォルトの名無しさん :02/07/26 02:35
>>97
逆だよ。組み込みの型なら、96はコンパイルできない

99 名前:デフォルトの名無しさん :02/07/26 02:40
Σ(・∀・;)エッ

100 名前:デフォルトの名無しさん :02/07/26 02:41
>>99
やってみて。

101 名前:デフォルトの名無しさん :02/07/26 02:45
bcc, g++, cl
全て通るようですが・・・。

102 名前:95=97 :02/07/26 02:46
>>98
どんなコンパイラ使ってんだ?


103 名前:デフォルトの名無しさん :02/07/26 02:47
>>101
.cppだと通る
.cだと通らない

104 名前:デフォルトの名無しさん :02/07/26 02:50
Σ(・∀・;)ソリャCナラ・・・

105 名前:103 :02/07/26 02:50
じゃあ俺スレちがいじゃん。ごめん

106 名前:デフォルトの名無しさん :02/07/26 02:51
ホントだ、知らなかった。勉強になりました >103
でもこのスレ C++ でしょ。


107 名前:デフォルトの名無しさん :02/07/26 02:56
じゃあ>>95の主張は正しいね。

108 名前:デフォルトの名無しさん :02/07/26 03:46
やべぇ、どうしてCで>>96が通らないのかわからないぞ、俺。
まあ、C++的にはそれでいいわけだから、C++プログラマとしては
恥じる必要はないのか…?


109 名前:デフォルトの名無しさん :02/07/26 04:03
>>108
Cの仕様ということでは?

110 名前:デフォルトの名無しさん :02/07/26 07:09
>>108
(a=3) が右辺値だから。
それより、>>96 みたいなコードを見て病的だと思わないのは
ヤバいかもしれません。


111 名前:11 :02/07/26 07:25
=はC++ではLvalueを返して、CではLvalueを返さないからね。
前置++とかもそうだね。Cに参照型がないことを考えれば
もっともだけども、C++での参照型のあつかいは
コンパイラへの遠慮のせいか中途半端で気持ち悪い。
どうせ実装はポインタになっちょうのにね
自動的に参照か値か判断されるのもなあ、
かといってref修飾子もエレガントじゃないしなあ

112 名前:デフォルトの名無しさん :02/07/26 18:33
質問なんですが、
a[4][4]:
のとき、
&a
は何を表すんでしょうか?単に
a
と書くときとの、意味の違いを教えてください。

#ひょっとして、文法的に間違ってるのかな?gccでは通るんだけど。

113 名前:デフォルトの名無しさん :02/07/26 18:37
>>112
a[0][0]:

のアドレス。だから一緒かと。
まぁ、偶然の一致な訳だけど。

114 名前:11 :02/07/26 19:19
>>112
T a[4][4]なら式で評価されると
aはT(*)[4]で&aはT(*)[4][4]だから別物だよ。
11でも書いたけど配列の仕様は気持ち悪いよね

115 名前:デフォルトの名無しさん :02/07/26 20:48
>>112
俺はそのへん、全然分からん。怖いから、そんなコード書くような状況になったら、
すぐにvectorに逃げるよ。

116 名前:11 :02/07/26 21:55
aはぜひともT[4][4]として評価されてコピー演算をサポートして
ほしいね。typeidやsizeofではT[4][4]なんだから。
それでT[4][4]からT(*)[4]のキャストをサポートすれば
いいんだから。気持ち悪いったらありゃしない。
そろそろ嫌われるな、おれ

117 名前:デフォルトの名無しさん :02/07/26 21:59
C++とC#はどう違うん?

118 名前:デフォルトの名無しさん :02/07/26 22:10
>>117
根本的に・・・。

119 名前:デフォルトの名無しさん :02/07/26 22:30
>>112

これでわかる?

てすとぷろぐらむ
---------------
#include <stdio.h>


int main()
{
int a[2][4];

printf("adr a = %x\n", a);
printf("adr a+1 = %x\n", a+1);
printf("adr &a = %x\n", &a);
printf("adr &a+1 = %x\n", &a+1);

return 0;
}


-------------------

じっこうけっか
-------------------
adr a = 12ff6c
adr a+1 = 12ff7c
adr &a = 12ff6c
adr &a+1 = 12ff8c


120 名前:119 :02/07/26 22:36
ごめんわすれてた
sizeof(int)は4ね。

121 名前:デフォルトの名無しさん :02/07/27 00:46
int a[3][4]; とあった場合

aという表記は、int [4]という型の要素を3つ持つ1次元配列。
a は &a[0] と同義なので、今言った1次元配列の先頭要素への
ポインタのこと。つまり、int (*)[4]ということになる。
&a は配列a全体へのポインタという意味になり、int(*)[3][4]
という型になる。

まとめると、
a --> &a[0] --> int (*)[4]
a[i] --> &a[0][0] --> int *
a[i][j] --> int
&a --> int (*)[3][4]


122 名前:デフォルトの名無しさん :02/07/27 00:49
a[i] --> &a[0][0] --> int * は間違いで
a[i] --> &a[i][0] --> int * でした。

123 名前:デフォルトの名無しさん :02/07/27 00:49
>>121
わかりやすい

124 名前:デフォルトの名無しさん :02/07/27 01:00
>>111さん
>>=はC++ではLvalueを返して、CではLvalueを返さないからね。
>>前置++とかもそうだね。

はじめて知りました。試して感激。てっきりC++でも、式の結果は左辺値でなく
値と思ってました。これってストラウストラップの本とか見ても載ってなさそう
なんですが、どこかに説明ありますか?ちなみに後置++は値ですね。何故だろう。。

125 名前:11 :02/07/27 01:45
C++ 3rdの6.2(Operator Summary)に書いてあるようだよ
それによると?:もLvalueを返せるようだね
後置++はインクリメント前の値を返すから
これを参照で返す仕様にするとインクリメントのタイミングが
ややこしくなるし、不自然だね

126 名前:デフォルトの名無しさん :02/07/27 02:03
>>125さん
ホントだ、載ってました。6.2.1ですね。
どうもです。

by 124

127 名前:デフォルトの名無しさん :02/07/27 02:42
互換性のある型だよね・・・。

128 名前:デフォルトの名無しさん :02/07/27 03:57
>>121
3次元配列の場合はどうなるの?
といってみるテスト

129 名前:121 :02/07/27 07:37
何次元でも考え方は同じ。配列を要素に持つ配列とか
配列の配列を要素に持つ配列とかいうふうに考えていけば
良いと思う。結局は1次元配列に帰着されるということ。
ちなみに121の"表記"というのは"配列"のこと。

int a[3][4][5]; とあった場合

aという配列は、int [4][5]という型の要素を3つ持つ1次元配列。
ややこしいけど言葉にすると、「"int型の要素を5つ持つ配列"を要素
として4つ持つ配列」を要素として3つ持つ1次元配列。
プログラム中でaと書くと、それは&a[0]を意味し、直前に言った
1次元配列の先頭要素へのポインタとなり、その型は
int (*)[4][5]となる。

a[i]という配列は、int [5]という型の要素を4つ持つ1次元配列。
言葉にすると、"int型の要素を5つ持つ配列"を要素として4つ持つ
1次元配列。プログラム中でa[i]と書くと、それは&a[i][0]を意味し、
直前に言った1次元配列の先頭要素へのポインタとなり、その型は
int (*)[5]となる。

a[i][j]という配列は、int型の要素を5つ持つ1次元配列。
プログラム中でa[i][j]と書くと、それは&a[i][j][0]を意味し、
直前に言った1次元配列の先頭要素へのポインタとなり、その型は
int *となる。

でもってa[i][j][k]はint。

&a はaという配列全体へのポインタという意味になり、その型は
int (*)[3][4][5] となる。

頭がおかしくなりそうだけど。

130 名前:112 :02/07/27 08:37
房なわたしの質問におつきあいいただきありがとうございます。
なんとなく分かったような気がしました。

うちの大学の教授に聞いても分からなかったし、どのポインタ関連の本を
読んでも書いてなかったので質問したんですが、
まさかこんなに丁寧に答えてくれるとは思いませんでした。
ありがとうございました。

131 名前:デフォルトの名無しさん :02/07/27 11:28
stlのvectorで大きなオブジェクトを生成後、追加していきたいのですが

BigObj obj; // と一旦作って
obj.hoge = moge;
obj.hoge2 = moge2;
... と色々変更して

最後にpush_backするとコピーの手間が余計な気が済ます
あらかじめ確保されたvectorの領域を直接書き換えられないでしょうか?

array.reserve(適当);

BigObj &obj = array.end();
obj.hoge = moge;
array.resize(array.size()++);

とか、あんま美しくないんですけど、他にやる以外方法ないんでしょうか?

132 名前:デフォルトの名無しさん :02/07/27 11:38
>>131
BigObjにデフォルトコンストラクタつくって、std::vectorに
デフォルト値つっこんでから変更したら?

133 名前:デフォルトの名無しさん :02/07/27 12:20
>>131
vector使う意味あまりなさそう

134 名前:446 :02/07/27 14:05
c++をコンパイラ・実行できるフリーソフトってありますか?cの方は見つかったのですがなかなかみつからなくて。。。
お願いします。

135 名前:デフォルトの名無しさん :02/07/27 14:59
gcc

136 名前:デフォルトの名無しさん :02/07/27 15:07
>>134
実行ってことは、インタプリタが欲しいん?

137 名前:デフォルトの名無しさん :02/07/27 15:18
>>134
プラットフォームを書いてくれないと何とも…。
UNIX系だったら最初からコンパイラついてると思うし。

WindowsだったらやっぱりBorland C++ Compilerかねぇ。


138 名前:デフォルトの名無しさん :02/07/27 15:43
>>134
とりあえず、gccだな。Windows, Mac(X), UNIXどれででも使える。

139 名前:Rina ◆tI333vNE :02/07/27 16:30
>>134
とりあえず, yaccとlexで….
…嘘です, ごめんなさい.

140 名前:デフォルトの名無しさん :02/07/27 16:31
>>139
yaccとlexって言いたかったの?

141 名前:Rina ◆tI333vNE :02/07/27 16:35
自分でコンパイラから書けと言いたかったのです.
…よくよく考えたら, 自分で書こうとして放置プレイした
まんまなんで, 人の事言えないなぁとw

142 名前:デフォルトの名無しさん :02/07/27 16:36
>>141
でも、コンパイラがないと、yaccやlexだけではコンパイラ作れないよね。

143 名前:Rina ◆tI333vNE :02/07/27 16:37
あ…そういわれてみれば.

144 名前:デフォルトの名無しさん :02/07/28 01:10
オブジェクトの書き出しにスマートな方法解説してるページってありません?

見たので一番シンプルだったのは operator<< オーバーライトで
BinWriter << メンバ1 << メンバ2 << メンバ3
見たいに書いてるやつ。

でもグローバルに operator<<が大量に発生するんだよね…
基底クラスを工夫すればもっといい書き方あるかなぁ…?



145 名前:   :02/07/28 02:23
すいません。宿題でバイナリーサーチツリーを使った
電話帳というのを作らないといけないのですが、ちょっと
エラーが解決できなくって・・。
バイナリーサーチツリー自体は完成して、で、テンプレートを
使ってどんなオブジェクトでも収納できるようにしたんですよ。
テストしてみるとIntのときは問題なくうごいているんですが、
いざ自分の作ったPersonというクラスを収納しようとすると
コンパイルはできるんですが、ビルドの際に

LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/BinaryTreeNode.exe : fatal error LNK1120: 1 unresolved externals

というメッセージがでて実行できません。これは一体
どうすればよいのでしょうか?自分なりに検索してプロジェクト
の設定のところをいじってみたんですが、もう行き詰まってしまい
ました・・。どなたかご存知のかたいらっしゃいますでしょうか。

146 名前:デフォルトの名無しさん :02/07/28 02:26
_main …

147 名前:デフォルトの名無しさん :02/07/28 02:30
>>145
Personをintに直したら通るんか?
別のところもいじったか?

148 名前:デフォルトの名無しさん :02/07/28 02:32
>>145
なんでバイナリサーチでわざわざツリーを作るんだ?
バイナリサーチじゃなくて、2分木でデータベースを作る課題か?

149 名前:    :02/07/28 02:36
>>147
はい。
Person を int に直したらちゃんと動いてくれます。
ためしに乱数を入れてみて表示したらちゃんとソート
されてました。

>>148
うん??なんででしょう?いや、実際よく
わかんないっす・・汗

150 名前:デフォルトの名無しさん :02/07/28 02:37
構造体のアドレスの渡し方なんですが
関数側渡して値を入れさせてますが、どうも反映されません。
構造体の定義を変数の前でやると「NULL」入ってるし
変数の後でやったら「セグメンテーション違反」なるし。
何がおかしいのでしょう…。解る方教えて下さい…。

int main(void){ int i,terms; FORMTERM *term; terms=Get_Form(term); printf("Content-type: text/plain\n\n"); printf("FORM VARIABLE\n"); for(i=0;i
int main(void){ int i,terms; FORMTERM *term; terms=Get_Form(term);


www-cms.phys.s.u-tokyo.ac.jp/%7Enaoki/CIPINTRO/CCGI/SRC/form.cc を参考にしました。

151 名前:デフォルトの名無しさん :02/07/28 02:41
>>150
殺人級に読みにくい

152 名前:     :02/07/28 02:43
>>148
あ!そうそう!それです!
2分木の各ノードにPersonというクラス
を収納したいんですよ。
Personは NameとNumber(共にString)を
持ってるだけの単純なクラスです。

153 名前:デフォルトの名無しさん :02/07/28 02:43
>>149
Personの定義部と、ツリーに格納する周辺のコードを貼ってよ

154 名前:デフォルトの名無しさん :02/07/28 02:44
>>144
テンプレート使え。
但し 
template <class T> writer& oeprator<<(writer& w, T &t)
と汎用なのは禁句。特別バージョンとあいまいさが解決できないから。

class tを一度ラップして書きましょう



155 名前:デフォルトの名無しさん :02/07/28 02:49
まぁ宿題スレへ行け。
スレ違い。

156 名前:デフォルトの名無しさん :02/07/28 02:51
宿題スレは潰れた

157 名前:デフォルトの名無しさん :02/07/28 02:52
http://pc3.2ch.net/test/read.cgi/tech/1027756023/l50

158 名前:      :02/07/28 02:53
>>155

逝ってきます

159 名前:デフォルトの名無しさん :02/07/28 03:01
五年ぐらい前に組んだC++のチャット用プログラムが
急にエラー起こすようになりました。
ブラウザのバージョンアップについていけないっていうことありますか?
あるとすれば、どんな理由が多いでしょうか

160 名前:デフォルトの名無しさん :02/07/28 03:02
は?
・環境
・使用ライブラリ(WinInet/Winsock)
とか記載しろよ

161 名前:デフォルトの名無しさん :02/07/28 03:02
Y2k

162 名前:デフォルトの名無しさん :02/07/28 03:05
2001/9/9問題

163 名前:デフォルトの名無しさん :02/07/28 03:06
非決定性有限状態オートマトソってなんですか?

164 名前:デフォルトの名無しさん :02/07/28 03:06
あとDFA?も教えてください

165 名前:デフォルトの名無しさん :02/07/28 03:08
>>163-164
C++関係なくない?
DFAはdeterministic finite automatonだっけか?

166 名前:163 :02/07/28 03:18
ゴーグレで調べたらC++のコードが出てきたもんでC++でやるのが普通なのかと思ってました
そうでもないんですね(^∀^;)

167 名前:デフォルトの名無しさん :02/07/28 03:42
基底クラスのstaticなメンバ変数を派生クラスから
使いたいんですが、複数の派生クラスを作ると
"すでに定義されています"というエラーが出てしまいます。

// A.h
class A {
protected :
static int num;
};

// B.h
class B : public A {};

// B.cpp
int B :: num = 1;

// C.h
int C :: num = 2;

// C.cpp
class C : public A {};

numはそれぞれの派生クラスで定義しないといけないんでしょうか?


168 名前:デフォルトの名無しさん :02/07/28 03:47
>>167
B::numもC::numも実体はA::numだからエラーが出て当然じゃないの?


169 名前:デフォルトの名無しさん :02/07/28 03:49
>>167
static int num; の実体は一つしか存在しません。いくら派生しても
同じです。

だから二重定義エラーが出る。

170 名前:デフォルトの名無しさん :02/07/28 03:58
C++不要論。

171 名前:デフォルトの名無しさん :02/07/28 04:00
>>170
ん?どうした?

172 名前:デフォルトの名無しさん :02/07/28 04:08
実は言語は破綻していてライブラリでカバーしているだけなのを
おくびにも出さない必死なC++厨


173 名前:デフォルトの名無しさん :02/07/28 04:13
はぁ。

174 名前:デフォルトの名無しさん :02/07/28 04:16
(((;゚Д゚)))) .。oO(煽られてる・・・どうしよう

175 名前:デフォルトの名無しさん :02/07/28 04:23
ライブラリの支援を得てどうにか実用レベルのC++
しかもそれらを安全に使うためにはより多くの知識が要求される
ライブラリでなんとかするんならVBでもできる罠
つまり費用対効果で見るとVB以下。


176 名前:デフォルトの名無しさん :02/07/28 04:23
(((;゚Д゚)))) .。oO(煽られてる・・・どうしよう

177 名前:デフォルトの名無しさん :02/07/28 04:25
(´-`).。oO(>>175おもしろいw)

178 名前:デフォルトの名無しさん :02/07/28 04:27
C++はストリームを<<で表現したかっただけちゃうんかと小一時間・・

179 名前:デフォルトの名無しさん :02/07/28 04:34
核心をつかれ黙り込んでしまうC++厨。

   〜〜〜〜〜〜〜〜〜〜〜〜終了


〜〜〜〜〜〜〜〜〜〜〜〜終了

                 〜〜〜〜〜〜〜〜〜〜〜〜終了

       〜〜〜〜〜〜〜〜〜〜〜〜終了


180 名前:デフォルトの名無しさん :02/07/28 04:35
       /■ヽ
      (´Д`)
  (( ─━OO━─ ))
        ∪∪

181 名前:デフォルトの名無しさん :02/07/28 04:37
>>180
やせたいのかい?

182 名前:デフォルトの名無しさん :02/07/28 04:40
コラコラ、終了したスレを荒らさないようにな。


183 名前:デフォルトの名無しさん :02/07/28 04:42
std::system("cdplayer");

184 名前:デフォルトの名無しさん :02/07/28 04:53
> C++はストリームを<<で表現したかっただけちゃうんか

Σ(゚Д゚) それが核心だったのかー

185 名前:デフォルトの名無しさん :02/07/28 04:57
必死なC++厨とは裏腹に中身がCのままのなんちゃってCプラプラグラマのなんと多いことか。
所詮現実にはCが築いた資産の価値を認める世間とそうせざるを得ない現実。


186 名前:デフォルトの名無しさん :02/07/28 05:00
ふー

187 名前:デフォルトの名無しさん :02/07/28 05:04
>186=反論できないヤシ=バカ=C++厨=シネってこった


188 名前:デフォルトの名無しさん :02/07/28 05:06
必死だねぇ

189 名前:デフォルトの名無しさん :02/07/28 05:07
ここは相談室なんで、↓行って好きなだけ罵倒して下さい。

・C++について言いたいことがあればどうぞ ++
http://pc.2ch.net/test/read.cgi/prog/1017746969/

190 名前:デフォルトの名無しさん :02/07/28 05:13
では相談いたします。
みなさんはなぜそんなに盲目C++信者なんですか?
いつ絶滅してくれますか?教えてください。よろしくお願いします。


191 名前:Stroustrupは神様です :02/07/28 05:14
C++ばんざ〜い

192 名前:デフォルトの名無しさん :02/07/28 05:15
>>190
おいたが過ぎますぞ。

193 名前:デフォルトの名無しさん :02/07/28 05:17
何で190はこんなに必死に煽ってるんでしょうか?

194 名前:デフォルトの名無しさん :02/07/28 05:22
>190
同意。みんなCに帰ろう


195 名前:デフォルトの名無しさん :02/07/28 05:25
>190
同意。C++は先細って行くだろうな


196 名前:デフォルトの名無しさん :02/07/28 05:25
一人で帰ってろ低能。

197 名前:デフォルトの名無しさん :02/07/28 05:34
>196
同意。C++は自分の重みでつぶれてしまうだろうな

198 名前:デフォルトの名無しさん :02/07/28 05:35
ジサクジエンどすか?

199 名前:デフォルトの名無しさん :02/07/28 05:44
>198
同意。C++厨はC++開発者の自作自演。このスレもその道具。そこまでしてはやらせたいのか・・。

200 名前:デフォルトの名無しさん :02/07/28 05:48
>199
同意。200

201 名前:デフォルトの名無しさん :02/07/28 05:58
で??

202 名前:デフォルトの名無しさん :02/07/28 06:00
で?

203 名前:デフォルトの名無しさん :02/07/28 06:21
sage

204 名前:デフォルトの名無しさん :02/07/28 06:41
ヘタレが作ったC++プログラムは、トレースする気が起こらん。
Cならマシだが。なんつー漏れがヘタレか。


205 名前:デフォルトの名無しさん :02/07/28 07:12
>>204
随分簡単な悩みですね。

206 名前:デフォルトの名無しさん :02/07/28 08:19
>>204
言語に関わらず、残念なコードをトレースするのはつらい。

207 名前:デフォルトの名無しさん :02/07/28 09:02
まともなソースブラウザがあればそうでもない。
C++が糞なのは、例外がたんまり織り込まれた構文で、
言語自体の能力はまともだし、面白いと思うが。
プリプロセッサを引きずったのが最大の敗因と考える。


208 名前:デフォルトの名無しさん :02/07/28 09:19
>>207
>C++が糞なのは、例外がたんまり織り込まれた構文で、言語自体の能力はまともだし、面白いと思うが。
文の始まりと終わりが対局だぞ・・・?

209 名前:デフォルトの名無しさん :02/07/28 09:29
s/構文で/構文だけで/

210 名前:デフォルトの名無しさん :02/07/28 09:43
ポインタって知ってる?みたいなJavaやperlのコードを見ると悲しくなりますヨ

211 名前:デフォルトの名無しさん :02/07/28 09:44
イテレータって知ってる?みたいなC++のコードを見ると鬱になりますヨ

212 名前:デフォルトの名無しさん :02/07/28 10:00
>>210
PerlはともかくJavaは参照しかないんだからポインタの基本はわかってて然りっしょ。

213 名前:デフォルトの名無しさん :02/07/28 10:31
>>212
いやそうでもない・・・ポインタ渡しだというのに、実体渡しであるかのように
書かれたコードを見て激しくウツになったよ。
JavaもPerlもそのレベルのコーダが一人居ると死ねるね。

214 名前:デフォルトの名無しさん :02/07/28 11:56
>>213
思いっきり引数に3足してたりとか?w


215 名前:デフォルトの名無しさん :02/07/28 12:09
>>214
それならダメな人ってすぐに分るけど・・・
具体的には、関数にインスタンスを渡してるんだが、
その関数が中身を書き換えるような操作をするのね。
それに気づいてない。

216 名前:デフォルトの名無しさん :02/07/28 12:20
204です。

意味不明な情報隠蔽はトレース隠蔽(言葉変)に思えてきて。
トレースというより、ウォーリーを探している感じ。
そのうち、トレースしていた場所が何処だったか分からんように
なったり。

ま、自分の理解力が足らんのだろうと、自戒する。


217 名前:デフォルトの名無しさん :02/07/28 12:23
void hoge(SomeClass *p)
{
if(p->SomeMethod() != 0)
{
p->SomeField =0;
return;
}
}

これは許容範囲でしょ?



void hoge(SomeClass *p)
{
if(p->SomeMethod() != 0)
{
p = p->GetNextSomeClass();
return;
}
else
{



}

これも問題ない。
引数はポインタのコピーだからそのコピーをいじっても引数のポインタの値は変わらない。

何が問題?

素人でスマソ。

218 名前:デフォルトの名無しさん :02/07/28 12:45
俺も早く働きてぇ。
どれほどバカなコードがまかに通ってるのか見てみたい。

219 名前:デフォルトの名無しさん :02/07/28 12:48
>>218
>がまかに通ってるのか見てみたい。

ミスタイプにしてはキーの位置が離れすぎてるぞ?w

220 名前:デフォルトの名無しさん :02/07/28 13:02
は?

221 名前:デフォルトの名無しさん :02/07/28 13:05
>>218 の周囲ではバカな言い回しがまかり通ってるみたいだな。

222 名前:デフォルトの名無しさん :02/07/28 13:11
かに通ってます

223 名前:デフォルトの名無しさん :02/07/28 13:14
正直、218とは働きたくない

224 名前:デフォルトの名無しさん :02/07/28 13:17
みんな待て。かな入力なら「に」と「り」の位置は妙に近い。
でも>>223と同意。

225 名前:デフォルトの名無しさん :02/07/28 13:23
かな入力のプログラマ萎え

226 名前:デフォルトの名無しさん :02/07/28 14:13
>>225
あー、ほらなんつったっけ、日本語ベースなあれは……

227 名前:デフォルトの名無しさん :02/07/28 16:03
Mind

228 名前:デフォルトの名無しさん :02/07/28 17:47
>>226
ここではIMEの日本語入力方法のことじゃん?
普通ローマ字入力じゃね?

229 名前:デフォルトの名無しさん :02/07/28 17:52
くだらねえ

230 名前:デフォルトの名無しさん :02/07/28 17:58
じゃあ、なんかおもしろそうな質問してくれYO

231 名前:デフォルトの名無しさん :02/07/28 22:36
質問いいですか?

あの、VC++で、CGIにデータを送りたいんですが
どういう関数を使えばいいんでしょうか?

232 名前:デフォルトの名無しさん :02/07/28 22:44
send

233 名前:デフォルトの名無しさん :02/07/28 22:49
えと、sendについて調べてみました。
実際のところはsendだけでいいんでしょうか?


234 名前:デフォルトの名無しさん :02/07/28 22:55
送るだけならsend
当然sendをするに当たって前準備などをしなければならない。

235 名前:デフォルトの名無しさん :02/07/28 23:03
>>231
とりあえずインターネット(つーか、TCP/IP)とのデータのやりとりには
WinSockっつーAPI体系を使うのが普通なのでそれを調べてみては。

っていうか、このスレって処理系依存、環境依存の話もOKなのか?
漏れは最近見始めたからよく知らないんだが。
C++のスレって言うと、言語仕様だとかライブラリだとかの話題
なんじゃないの?とふと思った。


236 名前:デフォルトの名無しさん :02/07/29 00:39
>>235
環境に依存していたとしても、C++的な問題の可能性があるなら
ここで振ってもいいのでは?

おしえて君は勘弁だが、なんでもかんでも環境依存うぜえという
わけではないと思うぞ。

237 名前:デフォルトの名無しさん :02/07/29 05:31
>>235
> C++のスレって言うと、言語仕様だとかライブラリだとかの話題
原則としてはそうだけど、C++ だと Java や Perl と比較すると標準ライブラリが
全然充実してないし、非標準でも TCP/IP の話などは多くの環境で共通する話
題なので、あまり厳密にやらんでも良いかと。

もし他に適切なスレがあるようなら、やんわりと誘導するって事で。

238 名前:デフォルトの名無しさん :02/07/29 10:26
オブジェクトのファイルへの出力のエレガントな方法を教えてください
シリアライズまでは求めません

つか、みんなどうしてんの??
初心者本はfwirte止まりだし、アホかと。

239 名前:デフォルトの名無しさん :02/07/29 10:28
ToStringメソッドとか

240 名前: ◆JAPH9PWA :02/07/29 11:12
>>238
普通はoperator <<をオーバーロードするんじゃないかな。


#include <iostream>
namespace my{
class Foo{};

// この関数はnamespaceの中にあるにもかかわらず、適切に呼ばれる
template <class charT >
std::basic_ostream<charT>&
operator << (std::basic_ostream<charT>& os, Foo&)
{
return os << "Foo";
}

} // namespace my

int main ()
{
my::Foo a;
std::cout << a << std::endl;
std::wcout << a << std::endl;
}


241 名前:デフォルトの名無しさん :02/07/29 11:19
<<オーバーロードいいんだけど、

save対象の全種のオブジェクトに対して書く必要があるでしょ。それはエレガントじゃないと。
基本形 MyObj について書くのはいいけど MyObj をSTLと組み合わせた場合なんかどうするのかと。

template<classT> saver& oeprator<<(saver&, T &t) と
template<classT> saver& operator<<(saver&, vector<T> &t)
はあいまいさが解決できずに共存できない罠…



242 名前: ◆JAPH9PWA :02/07/29 11:55
「save対象の全種のオブジェクトに対して書く必要がない」方法なんてあるの…?。
STLとの組み合わせならfor_each()を使うなりすればいいし。

ていうか
template<class T> saver& oeprator<<(saver&, T &t)
template<class T> saver& operator<<(saver&, vector<T> &t)
これがどう曖昧なのか分からないんですが、私の知識不足?

243 名前: ◆JAPH9PWA :02/07/29 12:02
って、templateか。

そりゃ曖昧ですよ。
でもoperatorの右オペランドを一般化するなんてそんな無茶な、ってな気がしますが。


244 名前:デフォルトの名無しさん :02/07/29 14:40
template<class T> ostream& operator<<(ostream &o, const T& t) {
 T::const_iterator i, e;
 e = t.end();
 for(i=t.begin(); i!=e; ++i) o << *i;
}

template<> ostream& operator<<(ostream &o, const 任意& t){...}

245 名前:デフォルトの名無しさん :02/07/29 16:57
質問です。以下のプログラムでsizeof(&a)がポインタの
サイズでなく、配列全体のサイズを返すのですが何故ですか?
その他は納得しています。
int main()
{
double d;
int a[2][3];

cout << sizeof(d) << endl; //8と表示
cout << sizeof(&d) << endl; //4と表示
cout << sizeof(int) << endl; //4と表示
cout << sizeof(a) << endl; //24と表示
cout << sizeof(a[0]) << endl;//12と表示
cout << sizeof(&a) << endl; //24と表示??なんで?
}

246 名前:デフォルトの名無しさん :02/07/29 16:58
>>245
親切設計

247 名前:デフォルトの名無しさん :02/07/29 17:03
aなんて物は本来存在せず、単なるシンタックスシュガーだから。
&a[0]と汁

248 名前:デフォルトの名無しさん :02/07/29 17:08
>>247
aは存在するでしょ?a[0]とかがシンタックスシュガーでしょ?

249 名前:デフォルトの名無しさん :02/07/29 17:17
シンタクスシュガー って何? 検索しても、 肝心の解説がみつからん

250 名前:デフォルトの名無しさん :02/07/29 17:17
bcc: 8 4 4 24 12 24
vc++: 8 4 4 24 12 24
g++: 8 4 4 24 12 4


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