>>951 英語という方言です
おっとマジレスは気体じゃなかったか?
じゃあ固体でこたいよう(プ
カナや漢字で表記してる限り日本語
いいからC++の話しろよ池沼どもが
Human* poor = new Human(954,"バカ");
while( true )
{
int err =poor->GetMyStick()->Shake( VERY_FAST );
if( err ) break;
}
delete poor;
>>957 マジレスしてるのはお前だけだと思うですわ
960 :
デフォルトの名無しさん:03/11/30 01:32
以下のソースをVC++6.0でコンパイルするとエラーになって
BC++5.5でコンパイルすると正常にコンパイルできるんですけど
言語仕様としては、どちらが正しいのでしょうか?
961 :
デフォルトの名無しさん:03/11/30 01:34
で、これがそのソース
#include <cstdio>
#include <cstring>
using namespace std ;
class Cparent
{
public :
classCchild
{
private :
structtag_child
{
char *name ;
int id ;
} ;
static struct tag_child ent ;
public :
char *getname(int i) { return ent.name ; }
int getid() { return ent.id ; }
} ;
Cchild child ;
} ;
Cparent::Cchild::tag_child Cparent::Cchild::ent={ "MANKO",100 } ;
int main( int ac , char **av )
{
Cparent p ;
printf("p.child.getname()=[%s]\n" , p.child.getname()) ;
printf("p.child.getid()=[%d]\n" , p.child.getid()) ;
return 0 ;
}
>>960-961 そのソースがコンパイルできるコンパイラがあるとはとても思えんのだが。
あと、どーゆーエラーが出たかくらいは書いた方がいいぞ。
> char *getname(int i) { return ent.name ; }
char *getname() { return ent.name; } か?
963 :
デフォルトの名無しさん:03/11/30 02:03
ごめんなさい
問題のある個所を絞り込む為に少し変更しました。
ご指摘の通り getname( int i ) は getname() に読み替えてください
964 :
デフォルトの名無しさん:03/11/30 02:08
エラーは、こんなのがでてます。
nest.cpp(29) : error C2248: 'tag_child' : private struct
(クラス 'Cparent::Cchild' で宣言されている)にアクセスできません。
nest.cpp(11) : 'tag_child' の宣言を確認してください。
965 :
デフォルトの名無しさん:03/11/30 03:47
いまベクトルをあらわす構造体を
struct tag_vect
{
int m_x;
int m_y;
};
とします。これに定数を掛けれるように演算子をオーバーロードしました
const struct tag_vect & operator * (int i)
{
m_x *= i;
m_y *= i;
return *this;
}
これだと
struct tag_vect v1, v2;
v1 = v2 * 10;
などとしたときにv2は10倍されてしまいます。
どうすればよいでしょうか??
return tag_struct(m_x * i, m_y * i);
かな。
自分自身に掛けるんじゃなくて、新しいインスタンスを作って返す。
>>965 const tag_vect operator *(const tag_vect &val,int scale){
tag_vect tv;
tv.m_x=val.x*scale;
tv.m_y=val.y*scale;
return tv;
}
968 :
デフォルトの名無しさん:03/11/30 04:06
969 :
デフォルトの名無しさん:03/11/30 04:13
と思ったらだめでした。
>>966 新しいインスタンスを返すとローカルアドレスをリターンしているという警告がでますm(__)m
(warning C4172: ローカル変数またはテンポラリのアドレスを返します。)
>>967 引数が多いといわれてしまいました。m(__)m
(error C2804: binary 'operator *' に引数が多すぎます。)
971 :
デフォルトの名無しさん:03/11/30 04:18
VC++6.0です。
>>967を変更して
const tag_vect operator *(int scale){
tag_vect tv;
tv.m_x=this->x*scale;
tv.m_y=this->y*scale;
return tv;
}
とすると?
973 :
デフォルトの名無しさん:03/11/30 04:22
>>972 warning C4172: ローカル変数またはテンポラリのアドレスを返します。
となってしまいました。
974 :
デフォルトの名無しさん:03/11/30 04:30
ちなみに全ソースは
typedef struct tag_vect
{
tag_vect()
{
m_x = 0;
m_y = 0;
};
tag_vect(int x, int y)
{
m_x = x;
m_y = y;
};
struct tag_vect & operator * (int i)
{
struct tag_vect v;
v.m_x = this->m_x * i;
v.m_y = this->m_y * i;
return v;
};
int m_x;
int m_y;
}VECTOR;
でMytestDlg.hファイルに記述してます。
struct tag_vect & operator * (int i)
だから & はずしてよ・・・
976 :
デフォルトの名無しさん:03/11/30 04:38
あ。。失礼しました。
&をとったらうまくいきました。ありがとうございます。
でもなんでかわからない。奥が深いですね
978 :
デフォルトの名無しさん:03/11/30 07:35
Hashのインデックスを算出するのに、テーブルサイズ10万個に
対して500個くらいのインデックス(アドレス?)に収束してしまうことって
よくあるんでしょうか?ほとんどのハッシュキーがかち合って
しまっていて、ほかのスペースはほとんど無駄になっている
状態です。
980 :
デフォルトの名無しさん:03/11/30 08:46
>>979 質の悪いハッシュ関数を使えばそうなる。
プログラミング言語C++第3版に載っていた方法はなかなか質が良かったな。90%以上は使ってくれた。
ちなみにサンプル数はテーブルサイズの十倍
>>980 90%とは・・・。500/100kだと0.5% _| ̄|○
サンプル数とは試したハッシュキーの数ですか?
自分の場合16バイトの文字列からかち合わない
組み合わせを探そうとしたんですが、組み合わせの
総数が28桁以上もある中から探そうというのがそもそも
アフォなんでせうか・・・
>>983 なんかハッシュについて勘違いしてる気がする。。。
「どんな入力達に対しても絶対バラける」ハッシュ関数なんてのは、
よほど入力パターンが少なくない限り不可能だ。16バイトの文字列なら
3.4*10^38通りも入力パターンがあるわけだから絶対無理だ。
「想定される一般的な入力」がバラけりゃそれでいい。例えば
int hash(char* p) {
int h=0;
for(int i=0;i<=12;++i) h^= *(int*)(p+i)<<i;
return h % 100000;
}
みたいな何も考えてない方式でも、大抵の場合0.5%なんてことにはならんはずだが。
入力される可能性のある文字列を全部並べ上げられるなら、
http://burtleburtle.net/bob/hash/perfect.html Perfect Hashing なんてものある。
>>982 > サンプル数とは試したハッシュキーの数ですか?
そう。パス付きzip書庫のパスワードを解析するのに使う辞書を使った。
>>983 古いJavaの腐ったハッシュ実装の例がプログラミング作法にあったな。
あれなら0.5%も夢じゃない。
>>983 >「どんな入力達に対しても絶対バラける」ハッシュ関数なんてのは、
いえいえ、今回の場合は目的が逆なだけなんです。普通は文字列
からインデックスを探しますが、今回はインデックスに対応する文字列を
探そうとしたんです。もちろんかち合いがありますから文字列を総当たりで
試していって、それぞれのインデックスに最初に対応する文字列を
見つけていこうと。
合い言葉みたいな物を想定してやってるので寧ろかち合いを
期待しています。
>>984 あ、それいいですね。参考にさせてもらいます。φ(..)メモメモ
ただ今更ながら気がついたのですが
ハッシュ関数内で、BCDを使ってまともに30桁近くを
計算してたんで、これをお手本通りにdoubleなんかにして
もういちど試してみます
(昔作ったBCDクラスを使ってみたかったってのもありまつ(汁)
989 :
GETクラスメンバ:03/11/30 13:30
typeinfoクラスで、実行時にclassの名前を取り出せますが、
同じように、実行時にメンバの一覧を取得することはできないものでしょうか?
990 :
GETクラスメンバ:03/11/30 13:41
おっと、スレ閉じてましたね。
しかも、テンプレートスレに行った方がよさそうかな。
レスキュー991
日本の119番はレスキュー991を逆にしたものでありゅ
レスキュー993
994へぇ
1000 名前:デフォルトの名無しさん[sage] 投稿日:03/11/30 14:45
1000
996 :
デフォルトの名無しさん:03/11/30 14:37
記念カキコ v(^-^*)
1000げとじゃん?
for(int C=1; C<=1000; C++)
printf("%dゲット!!\n",C);
for(int C=1; C<=1000; C++)
std::cout<<C<<"Get!!"<<std::endl;
1000 :
デフォルトの名無しさん:03/11/30 14:46
1000
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。