2013-03-21 77 views
0

我試圖創建一個類在C++複數的,但我發現這裏的類初始化器一個奇怪的錯誤是錯誤的截圖:類初始化器錯誤 - C++

enter image description here

這裏是我的代碼:

main.cpp中:

#include <iostream> 
#include "cmath" 
#include "Complexx.h" 


int main(int argc, const char * argv[]) 
{ 

complex c(1,1); 
std::cout << c.realPart << "+" <<c.imaginaryPart << "i"; 
return 0; 
} 

Complexx.h:

#ifndef Functions_Complexx_h 
#define Functions_Complexx_h 
#include "cmath" 
using namespace std; 

class complex { 

public: 
double imaginaryPart; 
double realPart; 
complex(double realPart, double imaginaryPart); 
double modulus(); 
}; 
#endif 

我在這裏做錯了什麼?

+2

定義在哪裏? – 2013-03-21 15:44:48

+0

您的實施在哪裏?你在建設並連接它嗎? – juanchopanza 2013-03-21 15:45:11

+3

您沒有定義構造函數。 – 2013-03-21 15:45:18

回答

2

您還沒有提供針對complex(double, double)構造函數的定義,但提供的聲明。這是鏈接器所抱怨的。

這個添加到.cpp文件在您的項目,該項目#include是你的頭文件complexx.h(可能complexx.cpp):

complex::complex(double realPart, double imaginaryPart) 
    : 
    realPart(realPart), 
    imaginaryPart(imaginaryPart) 
{ } 

這是可能的存在double modulus(),不會發出鏈接錯誤針對同樣的問題因爲你還沒有調用它。

0

看來你還沒有鏈接complex(double, double)構造函數的定義。 這可能是由於您忘記鏈接Complexx.cpp(假設cpp文件的名稱與頭文件相同)或您完全忘記在鏈接的Complexx.cpp文件中定義構造函數所致。

只要運行該G功能編譯main.cpp中時(假設你正在使用gcc)++命令:

g++ -c Complexx.cpp -o Complexx.o 
g++ -c main.cpp -o main.o 
g++ main.o Complexx.o -o app 
3

問題在這裏。

complex(double realPart, double imaginaryPart); 

宣佈一個構造函數,但你沒有定義它。這就是爲什麼鏈接器抱怨undefined symbol complex::complex(double, double)

這可能是定義你想 - 將這兩個參數存儲在對象中。

complex(double realPart, double imaginaryPart) 
    : realPart(realPart) 
    , imaginaryPart(imaginaryPart) 
{ } 

這些參數被命名的並不重要。 C++不會推斷這是因爲它們與您的成員變量具有相同的名稱,因此它們應該被複制到對象中。