我试图弄清楚为什么会发生此错误,但是我没有成功。

当我尝试编译这段代码时

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;
};

10-02 05:14