我在编译时获得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");
}
答案 0 :(得分:0)
创建可执行文件,编译和链接有两个步骤。在编译阶段,你有时只做一个承诺,比如“有一个函数int foo(float)
”,即使该函数不是这个编译单元的一部分。编译器将接受你的话,只插入一个占位符。稍后,链接器将汇编程序的不同部分并解析该占位符。由于它没有找到承诺的功能,因此会出错。
承诺的函数是析构函数,您声明了(~bandera_Triang();
)但从未实际提供过。如果你没有答应提供一个,编译器会为你创建这个特殊的功能,所以我建议你删除声明。为了让老师知道你考虑过这个,你可以这样写:
// default dtor is fine
// ~bandera_Triang();
或者你可以用一个空体来实现它。