【发布时间】:2017-04-06 02:34:31
【问题描述】:
我定义了一个类的构造函数如下:
struct TestClass
{
TestClass(std::uint8_t, std::vector<Type>)
{
//...
}
};
那我想用google test做一个单元测试,在我尝试构造TestClass的实例时出现编译错误,如下:
TEST(name1,name2)
{
//...
Type element;
std::vector<Type> lst{element};
TestClass instance(0, lst);
//...
}
gnu 编译器报告:
"在函数
name1_name2_Test::TestBody()':test.cpp:(.text+0x165d): undefined reference toTestClass::TestClass(signed char, std::vector)' collect2:错误:ld 返回 1 个退出状态”
下面是我的环境:
g++ 版本:5.3.0
谷歌测试版本:1.7.0
编译命令:g++ -D_GLIBCXX_USE_CXX11_ABI=0 test.cpp -std=c++14 -lboost_system -lgtest -lgtest_main -lpthread
你遇到过类似的问题吗?请给我一些建议,谢谢。
以下代码可能导致上述错误:
#include <gtest/gtest.h>
struct Element
{
Element(const std::vector<std::uint8_t>& element) : element_(element){}
std::vector<std::uint8_t> element_;
};
using ElementList = std::vector<Element>;
struct Information
{
Information(std::uint8_t, ElementList) {}
std::int8_t number_;
ElementList eleLst_;
};
TEST(name1,name2)
{
std::uint8_t number = 0;
std::vector<std::uint8_t> vec{1,2,3,4};
Element elem(vec);
ElementList lst{elem};
Information info(std::int8_t(0), lst); //false
}
GTEST_API_ int main(int argc, char **argv)
{
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
下面是编译信息:
/tmp/ccUzsTfz.o: 在函数
name1_name2_Test::TestBody()': test.cpp:(.text+0x130): undefined reference toInformation::Information(unsigned char, std::vector>)'
collect2:错误:ld 返回 1 个退出状态
【问题讨论】:
-
对不起,因为保密协议,我不能给你看完整的代码。在我看来,上面的错误信息足以描述我的情况,你应该有能力理解这个问题。 (以上代码是我原代码的抽象模型)
-
@ChenDong 不是完整的代码,而是仍然显示相同错误的 minimal 代码。
-
不,这还不够。首先,它甚至不是完整的构建消息,但我猜它是在链接阶段出现的。这意味着错误可能在 TestClass 的定义中,或者可能在您使用它的方式中。您确定 uint8_t 和 signed char 在您的系统上是同一类型(而不仅仅是具有相同的表示形式)吗?
-
@stackoverflow.com/users/3545273/serge-ballesta 是的,我更新了一个最小的代码。请帮我解决这个问题,
标签: c++ googletest allocator