編譯C++程序時,我有一個「未定義的引用」錯誤。我知道這是常見的陷阱,但到目前爲止無法弄清楚我做錯了什麼。C++'未定義的引用'錯誤
下面是相關的代碼。 Ex1Two_Sum.h:
#ifndef EX1TWO_SUM_H
#define EX1TWO_SUM_H
#include <vector>
using namespace std;
namespace ddc {
class Ex1Two_Sum
{
public:
void f();
protected:
private:
};
}
#endif
Ex1Two_Sum.cpp:
#include <vector>
#include <cstddef>
#include <iostream>
using namespace std;
namespace ddc {
class Ex1Two_Sum {
public:
void f(){
cout << "works" << endl;
}
};
}
最後,main.cpp中:
#include <iostream>
#include "Ex1Two_Sum.h"
using namespace std;
using namespace ddc;
int main()
{
Ex1Two_Sum ex1;
ex1.f();
return 0;
}
我編譯如下:
g++ -std=c++11 -c Ex1Two_Sum.cpp
g++ -std=c++11 -c main.cpp
g++ Ex1Two_Sum.o main.o
產生的以下信息:
main.o: In function `main':
main.cpp:(.text+0x2c): undefined reference to `ddc::Ex1Two_Sum::f()'
collect2: error: ld returned 1 exit status
呀。現在工作 - 需要包含iostream進行編譯。在一個相關的說明:你會說這是通常的方式來定義/使用類的c + +?我的意思是,在.h文件中有類規範,然後是一個單獨的文件來簡單地實現函數? – nmpg 2015-04-06 13:56:42
@nmpg:是的,這是通常的做法。另一種方法是將其全部定義在頭文件中,這有時是合適的(定義模板時通常需要),但可能導致過度的依賴關係。 – 2015-04-06 16:02:28