编译

时间:2015-07-28 06:14:36

标签: c++ linker-errors

该项目有2个类 - Tree和TreeTest类

TreeTest类测试Tree类的功能。

  • TreeTest.h

    #ifndef TREETEST_H
    #define TREETEST_H
    
    class TreeTest
    {
       public:
         TreeTest();
         virtual ~TreeTest();
         void InitTreeFunctionTest();
       protected:
       private:
    };
    #endif // TREETEST_H
    
  • TreeTest.cpp

    #include "TreeTest.h"
    #include "Tree.h"
    #include <cstring>
    #include <iostream>
    
    using namespace std;
    
    void TreeTest::InitTreeFunctionTest()
    {
       //code goes here
    }
    
  • Main.cpp的

    #include <iostream>
    #include <Tree.h>
    #include <TreeTest.h>
    
    using namespace std;
    
    int main(int argc, char* argv[])
    {
        TreeTest* tt;
        tt->InitTreeFunctionTest();
    }
    

但是当我使用

进行编译时,它会出现以下错误
g++ -fprofile-arcs -ftest-coverage main.cpp -I<full path to library> -o test
  

对TreeTest :: InitTreeFunctionTest()&#39;

的未定义引用

任何人都可以帮我找到错误吗?

由于

2 个答案:

答案 0 :(得分:0)

您尚未编译TreeTest.cpp

尝试将其添加到命令行:

g++ -fprofile-arcs -ftest-coverage TreeTest.cpp main.cpp -I<full path to headers> -o test

修改

您还需要在TestTree.cpp

中提供构造函数和析构函数的定义

另一种解决方案是在标题中内联函数定义。但是,您可能希望编译它,除非函数是微不足道的。

答案 1 :(得分:0)

请使用#include "TreeTest.h",而不是#include <TreeTest.h>。如果您要使用#include <TreeTest.h>,首先必须将TreeTest.cpp放入静态库中。顺便说一句,您可以搜索#include ""#include <>之间的差异。我希望这可以帮到你。