ERROR LNK1120:1个未解决的外部因素& ERROR LNK2019:未解析的外部符号!在编译时

时间:2015-04-05 07:12:07

标签: c++ visual-c++

我在编译时获得ERROR LNK1120: 1 unresolved externals & ERROR LNK2019: unresolved external symbol !

一些主题 - 我在搜索时结束 - 说是关于类定义的东西,而另一些是关于.cpp / .h文件的东西

错误:

ERROR LNK1120: 1 unresolved externals.  

ERROR LNK2019: unresolved external symbol "public: __thiscall bandera_Triang::~bandera_Triang(void)" (??1bandera_Triang@@QAE@XZ) 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");
} 

1 个答案:

答案 0 :(得分:0)

创建可执行文件,编译和链接有两个步骤。在编译阶段,你有时只做一个承诺,比如“有一个函数int foo(float)”,即使该函数不是这个编译单元的一部分。编译器将接受你的话,只插入一个占位符。稍后,链接器将汇编程序的不同部分并解析该占位符。由于它没有找到承诺的功能,因此会出错。

承诺的函数是析构函数,您声明了(~bandera_Triang();)但从未实际提供过。如果你没有答应提供一个,编译器会为你创建这个特殊的功能,所以我建议你删除声明。为了让老师知道你考虑过这个,你可以这样写:

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

或者你可以用一个空体来实现它。