2014-03-13 58 views
0

我試圖讓一個類工作來表示複數。我試圖從基類Number中派生出所有的東西,並且我從它中創建了兩個繼承的類Real和Complex。我試圖將虛函數放在Number基類中,以便我可以在派生類中實現它們。C++繼承問題,錯誤LNK1120&LNK2019

的問題是,當我去建一個類的實例,我收到以下錯誤信息:

錯誤2錯誤LNK1120:1周無法解析的外部 錯誤1個錯誤LNK2019:無法解析的外部符號「公用: __thiscall真實::〜雷亞爾(無效)」(?? 1Real @@ QAE @ XZ)中函數引用_wmain

我檢查了,我已經看到了錯誤1120 & 2019可以在您的項目鏈接器子系統出現設置爲Windows而不是控制檯,但我已經將其作爲控制檯應用程序。當我嘗試創建Real類的實例時,上面的錯誤出現在下面。謝謝你的幫助。

#include "stdafx.h" 
    #include <iostream> 
    #include <math.h> 

    #define PI 3.14159 

class Number 
{ 
public: 
    virtual void Add(double value)  { std::cout << "Add Numbers" << std::endl; } 
    virtual void Sub(double value)  { std::cout << "Subtract Numbers" << std::endl; } 
    virtual void Mult(double value)  { std::cout << "Multiply Numbers" << std::endl; } 
    virtual void Div(double value)  { std::cout << "Divide Numbers" << std::endl; } 
    virtual void SetVal(double value) { std::cout << "Set Number Value" << std::endl; } 
    virtual void PrintVal()    { std::cout << "Print Number Value" << std::endl; } 
}; 

class Real : public Number 
{ 
private: 
    double real; 

public: 

    Real(double value) 
    { 
     Real::real = value; 
    } 

    ~Real(); 

    void Add(double value) 
    { 
     real += value; 
    } 

    void Sub(double value) 
    { 
     real -= value; 
    } 

    void Mult(double value) 
    { 
     real *= value; 
    } 

    void Div(double value) 
    { 
     real /= value; 
    } 

    void SetVal(double value) 
    { 
     real = value; 
    } 

    void PrintVal() 
    { 
     std::cout << "Number = " << real << std::endl; 
    } 
}; 

class Complex : public Number 
{ 
private: 
    double real; 
    double complex; 

    double FindAngle(double real, double complex) 
    { 
     if (real == 0 && complex > 0) 
      return 0; 

     else if (real == 0 && complex < 0) 
      return PI; 

     else if (real > 0 && complex == 0) 
      return PI/2; 

     else if (real < 0 && complex == 0) 
      return 3 * PI/2; 

     else 
      return atan2(complex, real); 
    } 

public: 

    Complex(double val1, double val2) 
    { 
     real = val1; 
     complex = val2; 
    } 

    ~Complex(); 

    void Add(double val1, double val2) 
    { 
     real += val1; 
     complex += val2; 
    } 
    void Sub(double val1, double val2) 
    { 
     real -= val1; 
     complex -= val2; 
    } 

    void Mult(double val1, double val2) 
    { 
     double abs1, abs2, angle1, angle2; 
     double absFinal, angleFinal; 

     abs1 = sqrt(real*real + complex*complex); 
     abs2 = sqrt(val1*val1 + val2 + val2); 
     angle1 = FindAngle(complex, real); 
     angle2 = FindAngle(val2, val1); 

     absFinal = abs1 * abs2; 
     angleFinal = angle1 + angle2; 

     real = absFinal * cos(angleFinal); 
     complex = absFinal * sin(angleFinal); 

    } 

    void Div(double val1, double val2) 
    { 
     double abs1, abs2, angle1, angle2; 
     double absFinal, angleFinal; 

     abs1 = sqrt(real*real + complex*complex); 
     abs2 = sqrt(val1*val1 + val2 + val2); 
     angle1 = FindAngle(complex, real); 
     angle2 = FindAngle(val2, val1); 

     absFinal = abs1/abs2; 
     angleFinal = angle1 - angle2; 

     real = absFinal * cos(angleFinal); 
     complex = absFinal * sin(angleFinal); 
    } 

    void SetVal(double val1, double val2) 
    { 
     real = val1; 
     complex = val2; 
    } 

    void PrintVal() 
    { 
     std::cout << "Number = " << real << " + j" << complex << std::endl; 
    } 

}; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    Real r = Real(3); 
    system("PAUSE"); 
    return 0; 
} 
+0

可能重複[什麼是未定義的引用/未解析的外部符號錯誤,以及如何解決它?](http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved- external-symbol-error-and-how-do-i-fix) –

回答

2

Your Real ::〜Real()是未定義的,它已聲明,但未定義。

+0

我注意到,就在幾分鐘前。謝謝您的幫助。 – Copernicus

+0

不客氣。快樂的編碼! – DigitalEye