c++ - CPPUTest 的 Eigen ?

标签 c++ compiler-errors g++ eigen cpputest

我在尝试使用 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: 这是我的生成文件:

CXX = g++ -std=c++0x -lstdc++ CXXFLAGS = -g -Wall -static -fprofile-arcs -ftest-coverage -I./ -I$(CPPUTEST_HOME)/include LDFLAGS = -L./ -L$(CPPUTEST_HOME)/lib -lCppUTest -lCppUTestExt -pthread CPPUTEST_HOME = ./cpputest/workspace/install USER_CFLAGS = -I /usr/local/include/eigen3 TARGET = MyLibrary SRCS = MyLibrary.cpp MyLibraryTest.cpp OBJS = $(SRCS:.cpp=.o) all: $(TARGET) $(TARGET): $(OBJS) $(CXX) -o $@ $^ $(CXXFLAGS) $(LDFLAGS) $(OBJS): $(SRCS) $(CXX) -c $(CXXFLAGS) $^ %.o: %.cpp $(CXX) -c $(CXXFLAGS) $<
.PHONY: clean clean: rm -f $(TARGET) $(OBJS) *.gcno *.gcov ~ find . -name ".gcda" | xargs -r r

最佳答案

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

当我 #include <Eigen/Core>之前 #include <CppUTest/TestHarness.h> ,我没有得到你报告的错误(虽然没有进一步测试)。或者,您可以 #undef new在包括 CppUTest 或定义 CPPUTEST_MEM_LEAK_DETECTION_DISABLED 之后在包含 CppUTest 之前(这当然会禁用泄漏检测)。

Eigen 中有问题的行使用了 placement-new 运算符(即,它本身不分配内存),它的语法是抛出 CppUTest 的 new 的原因。微距关闭。

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

相关文章:

c++ - Topcoder 上一个有趣的编译错误

c++ - 使用configure文件生成makefile

c++ - 用 g++ 链接 opencv 库

python - 我该如何解决此__init__ self.init_window()错误

Scala 在同一行声明多个变量,且第一个字符为大写

c++ - 如何强制链接器在本地解析弱符号?

c++ - 你会用 <regex> 实现一个轻量级的 XML 解析器吗?

c++ - 新的 C++ 代码是否应该使用内存资源而不是分配器?

c++ 将数据添加到包含 std::tuple 的 std::vector

c++ - 变量值的后缀#DEN 是什么意思