Файл шаблона заголовка Bazel C++ дает ошибку: неопределенная ссылка на
Возникли проблемы со связыванием заголовка шаблона при создании проекта с помощью Bazel. Ссылка работает для файла, но не для файла. Для класса BinaryTree нет другого файла, кроме файла .
Получение следующей ошибки
hello_test.pic.o:hello_test.cpp:function BinaryTreeTest::BinaryTreeTest(): error: undefined reference to 'BinaryTree<int>::BinaryTree()'
collect2: error: ld returned 1 exit status
Нашел эту проблему, но разве я не должен получить ту же ошибку для и?
"Неопределенная ссылка на" конструктор класса шаблона
BUILD
cc_library(
name = "binary-tree",
hdrs = ["BinaryTree.h"]
)
cc_binary(
name = "main",
srcs = ["main.cpp"],
deps = [":binary-tree"]
)
cc_test(
name = "hello_test",
srcs = ["hello_test.cpp"],
deps = ["@com_google_googletest//:gtest_main", ":binary-tree"],
)
BinaryTree.h
template <typename T>
class BinaryTree{
public:
T value;
BinaryTree<T> *r = nullptr, *l = nullptr;
BinaryTree();
BinaryTree(T value_, BinaryTree* r_ = nullptr, BinaryTree* l_ = nullptr) : value(value_), r(r_), l(l_) {}
};
main.cpp
#include "BinaryTree.h"
int main() {
auto a = BinaryTree<int>(1)
}
hello_test.cpp
#include <gtest/gtest.h>
#include "BinaryTree.h"
class BinaryTreeTest : public ::testing::Test {
public:
void SetUp() override {
i1 = BinaryTree<int>(1);
}
BinaryTree<int> i1;
};
TEST_F(BinaryTreeTest, Tree) {
EXPECT_EQ(i1.value, 1);
}
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}