Файл шаблона заголовка 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();
}

0 ответов

Другие вопросы по тегам