Я определил конструктор класса, как показано ниже:
struct TestClass
{
TestClass(std::uint8_t, std::vector<Type>)
{
//...
}
};
Затем я хочу использовать тест Google для выполнения модульного теста, ошибка компиляции возникает, когда я пытаюсь создать экземпляр 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 to
TestClass::TestClass(signed char, std::vector‹ Type, std::allocator‹ Type>)’ collect2: error: ld вернул 1 статус выхода»
Ниже моя среда:
версия g++: 5.3.0
тестовая версия google: 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 to
Information::Information(unsigned char, std::vector‹ Element, std::allocator‹ Element > >)'
collect2: error: ld вернул 1 статус выхода