C ++随机问题

时间:2011-03-13 19:23:29

标签: c++ random

测试

RandomNumberGenerator rng;
cout << rng() << endl;

class RandomNumberGenerator {
public:
    unsigned long operator()(); 
};

CPP

unsigned long operator()() {   // HERE IS ERROR
srand(time(NULL));
unsigned long r = rand();
return r;
}

基本上我试图做一个随机数发生器。 但得到一个错误:

C:\ CodeBlocks \ kool \ praks3 \ src \ myfunctors.cpp | 5 | error:'long unsigned int operator()()'必须是非静态成员函数|

4 个答案:

答案 0 :(得分:6)

您需要使用operator()()告诉编译器RandomNumberGenerator类属于::类:

unsigned long RandomNumberGenerator::operator()()
{
    srand(time(NULL));
    unsigned long r = rand();
    return r;
}

编译器说它“必须是非静态成员函数”,因为operator()()必须是类的成员而不是全局函数。如果没有作用域操作符,编译器会认为operator()()是一个全局函数,因此不是RandomNumberGenerator的成员,这是错误的来源。

不要忘记将RandomNumberGenerator类的标题包含在源文件中!

答案 1 :(得分:3)

在课外,这就是你定义operator()

的方法
unsigned long RandomNumberGenerator::operator()() {
  //note this ^^^^^^^^^^^^^^^^^^^^^^^
   srand(time(NULL));
   unsigned long r = rand();
   return r;
}

部分RandomNumberGenerator::告诉编译器operator()属于类RandomNumberGenerator

答案 2 :(得分:2)

您没有确定运营商的范围。

试试这个:

unsigned long RandomNumberGenerator::operator()() {
    srand(time(NULL));
    unsigned long r = rand();
    return r;
}

的问候,
丹尼斯M。

答案 3 :(得分:1)

您忘记指定范围,请尝试unsigned long RandomNumberGenerator :: operator()() 关键是,编译器应该如何知道你的operator()属于哪个类?