尝试使用CPPUTest测试我的库时遇到问题。

一切都很好,直到我包括用于矩阵处理的Eigen库。
当我尝试使用g++进行构建时,Eigen库不断抛出错误:

  • /eigen3/Eigen/src/Core/util/Memory.h:270:41错误:“ptr”未命名类型
  • /eigen3/Eigen/src/Core/CoreEvaluators.h:1655:12错误:在“static_cast”
  • 之前预期的类型说明符
  • /eigen3/Eigen/src/Core/PlainOBjectBase.h:137:5错误:将'operator new'声明为无效

  • 如果Eigen或CPPUTest分别运行,则不会输出错误。

    我的猜测是这两个库在某些时候存在冲突。

    真的需要一些帮助。太谢谢了。

    编辑1:
    这是我的Makefile:

    最佳答案

    看来CppUTest定义了一个宏new:
    https://github.com/cpputest/cpputest/blob/master/include/CppUTest/MemoryLeakDetectorNewMacros.h#L76

    当我在#include <Eigen/Core>之前#include <CppUTest/TestHarness.h>时,我没有收到您报告的错误(不过,没有进行进一步的测试)。另外,您可以在包含CppUTest之后添加#undef new或在包含CppUTest之前定义CPPUTEST_MEM_LEAK_DETECTION_DISABLED(这当然会禁用泄漏检测)。

    Eigen中令人反感的行使用的是placement-new运算符(即,它本身并不分配内存),而语法就是抛出CppUTest的new宏的原因。

    关于c++ - Eigen 与CPPUTest吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41358317/

    10-10 13:20