用户定义类型的体系结构x86_64的未定义符号

时间:2018-02-23 11:50:59

标签: c++ compiler-errors c++14

在尝试测试我从头开始制作的Graph ADT时,编译失败并带有

Undefined symbols for architecture x86_64: 
"Graph<Region>::order()", referenced from:
creates_a_connected_graph_graph_Test::TestBody() in graph.test.cpp.o

我已经在SO上寻找解决方案,但是大多数都指向一个与实现不同的定义(标题与.cpp),或者是特定于案例的。我是C ++的新手,所以我不知道如何继续这个。

这是错误的代码:

Graph.h

template <class E>
class Graph {
public:
  Graph<E>(std::vector<std::pair<string, std::shared_ptr<E>>> nodes, std::vector<std::pair<string, string>> edges);
  std::size_t order();
  // ...
private:
  const std::unordered_map<string, std::pair<std::shared_ptr<E>, short>> m_nodes;
  // ...
}

Graph.cpp

template <class E>
Graph<E>::Graph(
  std::vector<std::pair<string, std::shared_ptr<E>>> nodes,
  std::vector<std::pair<string, string>> edges) {
    for(const auto& node : nodes){
      addNode(std::get<0>(node), std::get<1>(node));
    }
    for(const auto& edge : edges){
      addEdge(std::get<0>(edge), std::get<1>(edge));
    }
};

/**
 * Returns the number of nodes in the Graph
 */
template <class E>
std::size_t Graph<E>::order() { return m_nodes.size(); };

Graph.test.cpp

TEST(creates_a_connected_graph, graph){
  using search_set = std::set<string>;
  using forest_map = std::unordered_map<string, std::pair<string, string>>;

  std::shared_ptr<Graph> g = loadGraph("./graph.json");
  const size_t order = g->order();
  const size_t dfs_order = algorithm::dfs<Region>(
    "r1",
    [](const string&, const search_set&, const forest_map&) -> bool { return true; }
  )(*g);
  ASSERT_EQ(order, dfs_order);
};

环境:

  • 操作系统:MacOS 10.13.3
  • C ++版本标记: -std=c++14

0 个答案:

没有答案