2015-04-05 129 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

相关问题