我试图弄清楚为什么会发生此错误,但是我没有成功。
当我尝试编译这段代码时
using namespace std;
#include <iostream>
#include <gmp.h>
#include <gmpxx.h>
class MyRand
{
gmp_randclass randGen(gmp_randinit_default);
};
int main()
{
MyRand s();
gmp_randclass gmpRand(gmp_randinit_default);
return 0;
}
使用此命令
g++ Random.cpp -lgmpxx -lgmp
,我得到以下消息:在Random.cpp:3:0中包含的文件中:Random.cpp:8:27:错误:
“ __gmp_randinit_default”不是一种类型
gmp_randclass randGen(gmp_randinit_default);
但是请注意,这一行
gmp_randclass randGen(gmp_randinit_default);
与这个相同(在主要功能内)
gmp_randclass gmpRand(gmp_randinit_default);
并且只有第一个会产生错误。
另外,如果我按照以下方式定义MyRand类(在函数内部初始化mpz_randclass)
class MyRand
{
void func()
{
gmp_randclass randGen(gmp_randinit_default);
}
};
我可以毫无错误地编译它。
有人知道发生了什么吗?
非常感谢你。
最佳答案
您不能在定义它们的地方初始化类成员(至少不能在C ++ 11之前)。您可以将其放在构造函数中。
class MyRand
{
public:
MyRand() : randGen(gmp_randinit_default) {
}
private:
gmp_randclass randGen;
};