c++ - 编译加密库时的问题

标签 c++ c++11 g++

<分区>

编译加密库时出现错误

crypto/ope.cpp: In member function ‘NTL::ZZ OPE::encrypt(const NTL::ZZ&, int)’:
crypto/ope.cpp:80: error: expected primary-expression before ‘[’ token
crypto/ope.cpp:80: error: expected primary-expression before ‘const’
crypto/ope.cpp:80: error: expected primary-expression before ‘const’
crypto/ope.cpp: In member function ‘NTL::ZZ OPE::decrypt(const NTL::ZZ&)’:
crypto/ope.cpp:110: error: expected primary-expression before ‘[’ token
crypto/ope.cpp:110: error: expected primary-expression before ‘const’
crypto/ope.cpp:110: error: expected primary-expression before ‘const’

代码片段如下:

template<class CB> 
ope_domain_range
OPE::search(CB go_low)
{
    blockrng<AES> r(aesk);

    return lazy_sample(to_ZZ(0), to_ZZ(1) << pbits,
                       to_ZZ(0), to_ZZ(1) << cbits,
                       go_low, &r);
}

ZZ
OPE::encrypt(const ZZ &ptext, int offset)
{
    ope_domain_range dr =
        search([&ptext](const ZZ &d, const ZZ &) { return ptext < d; }); 

    blockrng<AES> aesrand(aesk);
    auto v = sha256::hash(StringFromZZ(ptext));
    v.resize(16);
    aesrand.set_ctr(v);

    ZZ nrange = dr.r_hi - dr.r_lo + 1;
    if (nrange < 4 || det)
        return dr.r_lo + aesrand.rand_zz_mod(nrange);

    ZZ nrquad = nrange / 4;
    static urandom urand;

    switch (offset) {
    case -1: 
        return dr.r_lo + urand.rand_zz_mod(nrquad);
    case 0:
        return dr.r_lo + nrquad + urand.rand_zz_mod(nrquad * 2); 
    case 1:
        return dr.r_lo + nrquad * 3 + urand.rand_zz_mod(nrquad);
    default:
        assert(0);
    }   
}

第80行的代码是(第110行类似):

ope_domain_range dr =
        search([&ptext](const ZZ &d, const ZZ &) { return ptext < d; }); 

我不太熟悉新的 C++ 标准 C++11。这是新标准新引入的吗? 如果不是,那是什么意思? 如果是,我可以用 g++ 4.4.7 版编译 C++11 代码吗? (目前我用标记为 -std=c++0x 的 g++ 4.4.7 编译库。)

非常感谢。

最佳答案

有问题的代码是一个 C++11 lambda,由“[]”括起来的部分是捕获,它告诉编译器应该传入 lambda 之外的哪些变量和常量,以及如何传入。

在这种特殊情况下,lambda 通过引用捕获 ptext。

快速检查 GCC's c++0x page for GCC 4.4建议它不实现 lambda。您必须升级到更新的编译器。

关于c++ - 编译加密库时的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16656744/

相关文章:

c++ - 从运行时加载的 Dll 调用主程序的方法

在 minGW-W64 g++ 中编译的 C++ 代码不能用 Ubuntu g++ 编译

c++ - 在编译时使用 C++ 从另一个数组中提取一个数组

linux - 安装 FMOD Ex for Linux 以在 g++ 中使用的说明在哪里或什么?

C++ 私有(private)函数 - 不在此范围内错误

c++ - 如何使用 g++ 编译 openmp

c++ - 是否有重载的 sqrt 等数学函数

c++ - Windows 设备驱动程序不以参数 0 启动

c++ - CUDA 小核 2d 卷积 - 怎么做

c++ - 调用子类方法导致段错误