C++ linker error: undefined reference to
C++ linker error: undefined reference to
当我尝试在 Dev C++ 或 Geany 中编译 C++ 程序时收到以下错误消息:
[Linker error] undefined reference to `Reakcijska_pot::Reakcijska_pot()'
ld returned 1 exit status
我的代码是:
#include <iostream>
using namespace std;
class Reakcijska_pot
{
protected:
float reakcijska_pot;
float zacetna_hitrost;
float reakcijski_cas;
public:
Reakcijska_pot();
Reakcijska_pot(float v0)
{
float s1; float t1;
v0=v0 / 3.6;
t1=2.0;
s1=v0*t1;
reakcijska_pot=s1;
zacetna_hitrost=v0;
reakcijski_cas=t1;
}
void izpis_reakc()
{
cout <<"Reakcijska pot za vaso hitrost je: " <<reakcijska_pot <<"m" <<endl;
}
};
class Pojemek
{
protected:
float pojemek;
float koeficient_trenja;
float tezni_pospesek;
public:
Pojemek();
Pojemek(float am, float kt, float g)
{
g=9.8;
am=kt*g;
pojemek=am;
koeficient_trenja=kt;
tezni_pospesek=g;
}
};
class Pot_do_pojava_zavornih_sledi : public Reakcijska_pot
{
protected:
float reakcija_zavor;
float pot_rz;
public:
Pot_do_pojava_zavornih_sledi();
Pot_do_pojava_zavornih_sledi(float v0)
{
float t2; float s2;
t2=0.2;
s2=v0*t2;
reakcija_zavor=t2;
pot_rz=s2;
zacetna_hitrost=v0;
}
void izpis_pdpzs()
{
cout << "Dolzina prevozene poti ob reakciji zavor znasa: " <<pot_rz <<" m.";
}
};
class Pot_zaviranja : public Pojemek, public Reakcijska_pot
{
protected:
float zavorna_pot;
float koncna_hitrost;
public:
Pot_zaviranja();
Pot_zaviranja(float s3, float zacetna_hitrost, float vn, float pojemek, float reakcija_zavor)
{
zavorna_pot=s3;
koncna_hitrost=vn;
vn=0;
s3=(((zacetna_hitrost * zacetna_hitrost) - (vn * vn)) / (pojemek * pojemek)) + ((pojemek*(reakcija_zavor*reakcija_zavor))/8) - ((zacetna_hitrost*reakcija_zavor)/2);
}
void izpis_potz()
{
cout << "Dolzina poti zaviranja pri vasi hitrosti znasa: " <<zavorna_pot <<"m." <<endl;
}
};
class Pot_ustavljanja : public Pot_do_pojava_zavornih_sledi, public Pot_zaviranja
{
protected:
float pot_ustavitve;
public:
Pot_ustavljanja(float s, float reakcijska_pot, float zavorna_pot, float pot_rz)
{
pot_ustavitve=s;
s=reakcijska_pot+zavorna_pot+pot_rz;
}
void izpis_potust()
{
cout << "Pot ustavljanja pri vasi hitrosti je dolga: " <<pot_ustavitve <<"m.";
}
};
int main()
{
float v0, kt;
int podl;
cout << "Vnesite hitrost vasega vozila v km/h: "; cin >>v0; cout <<endl;
cout << "Izberite zavorno podlago\n" << "Vpisite 1 za suh asfalt\n" << "Vpisite 2 za moker asfalt\n" << "Vpisite 3 za poledenel asfalt\n";
cin >>podl;
if (podl == 1)
kt=0.6;
else
if (podl == 2)
kt=0.3;
else
kt=0.1;
Reakcijska_pot pot1(v0);
pot1.izpis_reakc();
Pot_do_pojava_zavornih_sledi pdpzs(v0);
pdpzs.izpis_pdpzs();
system ("pause");
return 0;
}
有人可以帮我解决这个问题吗?
您没有在任何地方定义 Reakcijska_pot::Reakcijska_pot
,尽管您的程序需要它。
要定义它,只需将声明替换为类似
的定义
Reakcijska_pot() { }
从C++11开始,你也可以这样写
Reakcijska_pot() = default;
产生与构造函数的空定义相同的结果。
这条语句在main
Pot_do_pojava_zavornih_sledi pdpzs(v0);
调用 Reakcijska_pot
的默认构造函数,因为 class Pot_do_pojava_zavornih_sledi
继承自 Reakcijska_pot
。
但是Reakcijska_pot
的默认构造函数还没有定义,所以链接器输出错误。
可以通过为 Reakcijska_pot
默认构造函数提供定义来更正错误:
Reakcijska_pot() {}
当我尝试在 Dev C++ 或 Geany 中编译 C++ 程序时收到以下错误消息:
[Linker error] undefined reference to `Reakcijska_pot::Reakcijska_pot()'
ld returned 1 exit status
我的代码是:
#include <iostream>
using namespace std;
class Reakcijska_pot
{
protected:
float reakcijska_pot;
float zacetna_hitrost;
float reakcijski_cas;
public:
Reakcijska_pot();
Reakcijska_pot(float v0)
{
float s1; float t1;
v0=v0 / 3.6;
t1=2.0;
s1=v0*t1;
reakcijska_pot=s1;
zacetna_hitrost=v0;
reakcijski_cas=t1;
}
void izpis_reakc()
{
cout <<"Reakcijska pot za vaso hitrost je: " <<reakcijska_pot <<"m" <<endl;
}
};
class Pojemek
{
protected:
float pojemek;
float koeficient_trenja;
float tezni_pospesek;
public:
Pojemek();
Pojemek(float am, float kt, float g)
{
g=9.8;
am=kt*g;
pojemek=am;
koeficient_trenja=kt;
tezni_pospesek=g;
}
};
class Pot_do_pojava_zavornih_sledi : public Reakcijska_pot
{
protected:
float reakcija_zavor;
float pot_rz;
public:
Pot_do_pojava_zavornih_sledi();
Pot_do_pojava_zavornih_sledi(float v0)
{
float t2; float s2;
t2=0.2;
s2=v0*t2;
reakcija_zavor=t2;
pot_rz=s2;
zacetna_hitrost=v0;
}
void izpis_pdpzs()
{
cout << "Dolzina prevozene poti ob reakciji zavor znasa: " <<pot_rz <<" m.";
}
};
class Pot_zaviranja : public Pojemek, public Reakcijska_pot
{
protected:
float zavorna_pot;
float koncna_hitrost;
public:
Pot_zaviranja();
Pot_zaviranja(float s3, float zacetna_hitrost, float vn, float pojemek, float reakcija_zavor)
{
zavorna_pot=s3;
koncna_hitrost=vn;
vn=0;
s3=(((zacetna_hitrost * zacetna_hitrost) - (vn * vn)) / (pojemek * pojemek)) + ((pojemek*(reakcija_zavor*reakcija_zavor))/8) - ((zacetna_hitrost*reakcija_zavor)/2);
}
void izpis_potz()
{
cout << "Dolzina poti zaviranja pri vasi hitrosti znasa: " <<zavorna_pot <<"m." <<endl;
}
};
class Pot_ustavljanja : public Pot_do_pojava_zavornih_sledi, public Pot_zaviranja
{
protected:
float pot_ustavitve;
public:
Pot_ustavljanja(float s, float reakcijska_pot, float zavorna_pot, float pot_rz)
{
pot_ustavitve=s;
s=reakcijska_pot+zavorna_pot+pot_rz;
}
void izpis_potust()
{
cout << "Pot ustavljanja pri vasi hitrosti je dolga: " <<pot_ustavitve <<"m.";
}
};
int main()
{
float v0, kt;
int podl;
cout << "Vnesite hitrost vasega vozila v km/h: "; cin >>v0; cout <<endl;
cout << "Izberite zavorno podlago\n" << "Vpisite 1 za suh asfalt\n" << "Vpisite 2 za moker asfalt\n" << "Vpisite 3 za poledenel asfalt\n";
cin >>podl;
if (podl == 1)
kt=0.6;
else
if (podl == 2)
kt=0.3;
else
kt=0.1;
Reakcijska_pot pot1(v0);
pot1.izpis_reakc();
Pot_do_pojava_zavornih_sledi pdpzs(v0);
pdpzs.izpis_pdpzs();
system ("pause");
return 0;
}
有人可以帮我解决这个问题吗?
您没有在任何地方定义 Reakcijska_pot::Reakcijska_pot
,尽管您的程序需要它。
要定义它,只需将声明替换为类似
的定义Reakcijska_pot() { }
从C++11开始,你也可以这样写
Reakcijska_pot() = default;
产生与构造函数的空定义相同的结果。
这条语句在main
Pot_do_pojava_zavornih_sledi pdpzs(v0);
调用 Reakcijska_pot
的默认构造函数,因为 class Pot_do_pojava_zavornih_sledi
继承自 Reakcijska_pot
。
但是Reakcijska_pot
的默认构造函数还没有定义,所以链接器输出错误。
可以通过为 Reakcijska_pot
默认构造函数提供定义来更正错误:
Reakcijska_pot() {}