2015-01-03 3 views
-4

я получаю следующее сообщение об ошибке при попытке компиляции программы на C++ в 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; 

} 

мая кто-нибудь поможет мне решить эту проблему?

+0

Пожалуйста исправить отступы. –

ответ

1

Это утверждение в main

Pot_do_pojava_zavornih_sledi pdpzs(v0); 

делает вызов конструктора по умолчанию Reakcijska_pot после class Pot_do_pojava_zavornih_sledi наследуется от Reakcijska_pot.

Но конструктор по умолчанию Reakcijska_pot не определен, поэтому компоновщик выдает ошибку.

ошибка может быть исправлена ​​путем предоставления определение для конструктора по умолчанию Reakcijska_pot:

Reakcijska_pot() {} 
+0

Проблема решена. благодаря –

0

Вы не указали Reakcijska_pot::Reakcijska_pot в любом месте, хотя это необходимо в вашей программе.

Чтобы определить его, просто заменить декларацию с определением, как

Reakcijska_pot() { } 

Поскольку C++ 11, вы также можете написать

Reakcijska_pot() = default; 

, чтобы получить тот же результат как пустое определение конструктора.

Смежные вопросы