每當我編的東西,來#include一個用戶定義的類,我得到這些編譯錯誤總是看起來像:main.cpp: undefined reference to Complex::Complex(double, double)
文件包含錯誤(C++):未定義的引用______
我已經減少了問題的一組三個非常空的文件:main.cpp,例如Complex.h和Complex.cpp。我仍然收到未定義的參考錯誤。我在Windows上的Code :: Blocks中開發,但在Ubuntu中使用g ++獲得了同樣的結果。爲什麼會發生?我已經嘗試過在Code :: Blocks中的main.cpp之前構建Complex.cpp,並且我嘗試了g++ main.cpp Complex.cpp
,就像我試過g++ main.cpp
一樣。每次都有相同的錯誤。
/*======== main.cpp ========*/
#include "Complex.h"
int main()
{
Complex A(1.0, 1.0);
return 0;
}
/*======== Complex.h ========*/
#ifndef _COMPLEX_H
#define _COMPLEX_H
class Complex
{
public:
double x, y;
Complex(double real, double imag);
};
#endif
/*======== Complex.cpp ========*/
#include "Complex.h"
Complex::Complex(double real, double imag)
{
x = real;
y = imag;
}
ed:現在我得到了不同的錯誤,所以我必須做一些完全錯誤的事情。使用與上面相同的代碼,我得到:
main.cpp: in function 'int main()':
main.cpp:5:5: error: 'Complex' was not declared in this scope
main.cpp:5:13: error: expected ';' before 'A'
這是離奇的。當我有一個.cpp文件中的類時,所有東西都工作得更早,但這是「不好的做法」,所以我將我的類定義移動到.h文件中,並將實現保存在.cpp文件中,現在什麼都不起作用。
另外一定要在編譯行中加上「-I」。如果你的.h文件在同一個目錄下,甚至可能是「-I」。 – paulsm4 2012-01-05 00:00:53
它適合我。我只複製了你的'main.cpp','Complex.h'和'Complex.cpp',並運行'g ++ main.cpp Complex.cpp'。它創建'a.out'就好了。 – ruakh 2012-01-05 00:01:43
也適用於我。 @ paulsm4:不應該''在默認包含路徑中? (請注意,他正在執行'#include「...」',而不是'#include <...>') – 2012-01-05 00:03:23