2015-04-05 126 views
-2

我得到的ERROR LNK1120: 1 unresolved externals & ERROR LNK2019: unresolved external symbol !在編譯錯誤LNK1120:1無法解析的外部錯誤LNK2019:無法解析的外部符號!雖然編譯

某些線程 - 我結束了,而搜索 - 說的是一些關於類的定義和其他那是後話與.cpp/.h文件

的錯誤:

ERROR LNK1120: 1 unresolved externals. 

ERROR LNK2019: unresolved external symbol "public: __thiscall bandera_Triang::~bandera_Triang(void)" ([email protected]@[email protected]) referenced in function _main. 

下面是代碼:

#include <iostream> 
using namespace std; 

class bandera_Triang { 
private: 
    float aSide, bSide, cSide; 

public: 
    bandera_Triang(){ //Cost. sin Param... 
     aSide = 0; 
     bSide = 0; 
     cSide = 0; 
    } 
    bandera_Triang(float A, float B, float C){ //Const. con Param... 
     aSide = A; 
     bSide = B; 
     cSide = C; 
    } 

    //Sets... 
    void set_A(float A){ aSide = A; } 
    void set_B(float B){ bSide = B; } 
    void set_C(float C){ cSide = C; } 

    //Gets... 
    float get_A(){ return aSide; } 
    float get_B(){ return bSide; } 
    float get_C(){ return cSide; } 

    ~bandera_Triang(); //destructor... 



    bool esTriang(){ //Desigualdad Triangular... 
     if (aSide < bSide + cSide && bSide < aSide + cSide && cSide < aSide + bSide) { 
      return true; 
     } 
     else 
      return false; 
    } 

    string triangOno(bool esTriang()){ //Print si es o no triangulo... 
     if (esTriang() == true){ 
      return "Es Triangulo."; 
     } 
     else { return "NO es Triangulo."; } 
    } 

    string tipoTriang(){ 
     if (aSide == bSide && bSide == cSide){ 
      return "El triangulo es Equilatero."; 
     } 
     else 
     if (aSide == bSide || aSide == cSide || bSide == cSide){ 
      return "El triangulo es Isosceles. "; 
     } 
     return "El triangulo es Escaleno."; 
    } 

    float arTriang(float aSide, float bSide, float cSide){ //Area Triangulo con F.Heron. 

     float lado_A, lado_B, lado_C, SemiPerim, areaTriang; //Variables locales para calculo. 

     SemiPerim = (lado_A + lado_B + lado_C)/2; //Calculo de Semiperimetro. 

     areaTriang = sqrt(SemiPerim * (SemiPerim - lado_A) * (SemiPerim - lado_B) * (SemiPerim - lado_C)); 

     return areaTriang; 
    } 

    string printArea(float arTriang){ cout << "El area del Triangulo es: " << arTriang << "cm2." << endl; } //Imprime Area :) 
}; //Fin Clase Triangulo 


//Inicia Main 

int main(){ 

    bandera_Triang triangA; 

    system("pause"); 
} 
+0

我也有同樣的錯誤。我只是更新到Visual Studio SP1。 也閱讀此更多信息: https://msdn.microsoft.com/en-us/library/799kze2z.aspx – 2015-04-05 07:13:30

+0

它告訴你,你還沒有定義析構函數(〜bandera) – cup 2015-04-05 07:20:41

+0

嗨,是的,雖然我正在等待答覆,我看了一下並評論了析構函數並編譯了它......你能告訴我它有什麼問題嗎? 感謝回覆! – 2015-04-05 07:26:21

回答

0

有兩個步驟來創建可執行文件,編譯和鏈接。在編譯階段,您有時只做出承諾,例如「函數int foo(float)」,即使該函數不是此編譯單元的一部分。編譯器會接受你的話,只能插入一個佔位符。稍後,鏈接程序將彙編程序的不同部分並解析該佔位符。由於它沒有找到承諾的功能,因此出錯。

承諾函數是析構函數,它聲明瞭(~bandera_Triang();)但從未實際提供。如果你沒有承諾提供一個,編譯器會爲你創建這個特殊的函數,所以我建議你刪除聲明。爲了讓老師知道你考慮過這個,你可以寫這樣的:

// default dtor is fine 
// ~bandera_Triang(); 

,或者你可以用一個空的身體實現它。

+0

嗨, 問題是這是一個任務和析構函數必須包括(所以老師知道我知道這是一個析構函數) 你能告訴我使用析構函數的寫入方式嗎? 先生,非常感謝。 – 2015-04-05 07:30:41

+1

再次感謝您的協助,先生。有一個很好的。 – 2015-04-05 07:38:36

相關問題