编译时 C++ 链接错误
C++ Linking Error while compiling
该项目有 2 个 classes - Tree 和 TreeTest class
TreeTest class 测试 Tree class 的功能。
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
undefined reference to `TreeTest::InitTreeFunctionTest()'
谁能帮我找出错误?
谢谢
你还没有编译TreeTest.cpp
尝试将其添加到您的命令行:
g++ -fprofile-arcs -ftest-coverage TreeTest.cpp main.cpp -I<full path to headers> -o test
编辑:
您还需要在 TestTree.cpp
中提供构造函数和析构函数的定义
另一种解决方案是在header 中内联函数定义。但是,除非函数很简单,否则您可能想要编译它。
请使用#include "TreeTest.h"
,而不是#include <TreeTest.h>
。如果你想使用#include <TreeTest.h>
,首先你必须把你的TreeTest.cpp
做成一个静态库。顺便说一句,您可以搜索 #include ""
和 #include <>
之间的区别。希望对您有所帮助。
该项目有 2 个 classes - Tree 和 TreeTest class
TreeTest class 测试 Tree class 的功能。
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
undefined reference to `TreeTest::InitTreeFunctionTest()'
谁能帮我找出错误?
谢谢
你还没有编译TreeTest.cpp
尝试将其添加到您的命令行:
g++ -fprofile-arcs -ftest-coverage TreeTest.cpp main.cpp -I<full path to headers> -o test
编辑:
您还需要在 TestTree.cpp
中提供构造函数和析构函数的定义另一种解决方案是在header 中内联函数定义。但是,除非函数很简单,否则您可能想要编译它。
请使用#include "TreeTest.h"
,而不是#include <TreeTest.h>
。如果你想使用#include <TreeTest.h>
,首先你必须把你的TreeTest.cpp
做成一个静态库。顺便说一句,您可以搜索 #include ""
和 #include <>
之间的区别。希望对您有所帮助。