测试
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()()'必须是非静态成员函数|
答案 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()
属于哪个类?