ページ 11

c++のクラスメンバのオブジェクトについて

Posted: 2010年3月29日(月) 17:22
by shin
VC++2008で、boostの乱数を使いやすくするクラスを作成しています。
作成したクラスのメンバは乱数発生に必要なオブジェクトのポインタを持ち、初期化の際に領域を
確保するようになっています。
領域の確保と乱数発生に必要なオブジェクトの初期化まではうまくいくのですが、乱数を取得するメソッドに
エラーが発生します。

error C2064: 0 引数を取り込む関数には評価されません。

というメッセージです。
同じ名前の関数や変数が存在するときに発生する事が多いようですが、確認した限りでは大丈夫でした。

unsigned long int mt_rand(){ return *mt_int_rand(); }

の部分でエラーとなります。
お手数をおかけしますが、分かる方、お願いいたします。

#include<boost/random.hpp>

using namespace std;

namespace My_Function{

namespace My_Random{
/////////////////////////// My_Random 乱数に関する関数およびクラス ////////////////////////////
class my_rand{

unsigned long int seed;

boost::mt19937 *gen;
boost::uniform_int<> *dst;
boost::variate_generator< boost::mt19937&, boost::uniform_int<> > *mt_int_rand;

public:

my_rand( unsigned long s=0 ){ seed=s; gen=NULL; dst=NULL; mt_int_rand=NULL; }
//コンストラクタ。seedを設定する。seedはデフォルトで0に設定される。また、ポインタにNULLをセットする。

~my_rand(){ delete gen; delete dst; delete mt_int_rand; }
//デストラクタ。領域を解放する。

void seed_config( unsigned long int s = 0 ){ seed = s; }
//乱数のseedを設定する

unsigned long seed_return(){ return seed; }
//seedを返す

/////////////////////////// C言語の標準ライブラリを使用した乱数発生 ///////////////////
void seed_set_c(){ srand( seed ); }
//c言語のrand()関数のseedをセットする

long int rand_signed_c(){ return rand(); }
//c言語の標準ライブラリの乱数を返す

double rand_0_1_c(){ return rand()/(RAND_MAX+1.0); }
//c言語の標準ライブラリを使用して0-1のdouble型小数を返す

/////////////////////////// boostのメルセンヌ・ツイスタを使用した乱数発生 ////////////////////
void mt_int_initialize( unsigned long min_number, unsigned long max_number );
//メルセンヌ・ツイスタの領域確保を含む初期化

unsigned long int mt_rand(){ return *mt_int_rand(); }
//乱数を返す
};


}
}





////////////////////////////////// My_Randomの実装内容 //////////////////////////////

void My_Function::My_Random::my_rand::mt_int_initialize( unsigned long min_number, unsigned long max_number )
{
//メルセンヌ・ツイスタの領域確保を含む初期化。seedと最小値、最大値を設定する。

gen = new boost::mt19937( seed );
dst = new boost::uniform_int<>( min_number, max_number );
mt_int_rand = new boost::variate_generator< boost::mt19937&, boost::uniform_int<> >( *gen, *dst );

}

Re:c++のクラスメンバのオブジェクトについて

Posted: 2010年3月29日(月) 17:28
by softya
マルチポストですよね?
http://detail.chiebukuro.yahoo.co.jp/qa ... 1338719778
まず、規約と注意事項をよくお読みください。→ http://dixq.net/board/board.html
その上で適切な対処をお願いします。

Re:c++のクラスメンバのオブジェクトについて

Posted: 2010年3月29日(月) 17:33
by shin
大変失礼しました。
リンク先の質問は削除しております。
引き続き、よろしくお願いいたします。

Re:c++のクラスメンバのオブジェクトについて

Posted: 2010年3月29日(月) 17:43
by たかぎ
> リンク先の質問は削除しております。

そういう問題ではないのでは?

Re:c++のクラスメンバのオブジェクトについて

Posted: 2010年3月29日(月) 17:44
by たいちう
> 大変失礼しました。
> リンク先の質問は削除しております。

リンク先のルールは知りませんが、
あなたの質問を見た人が30分かけて回答を書いたとして、
さぁ投稿しようとすると質問が削除されているわけですよね。

このような行為も失礼だと思いますが。

Re:c++のクラスメンバのオブジェクトについて

Posted: 2010年3月29日(月) 18:12
by dic
根本的に無理では?