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() {}