Obliczanie objętości ostrosłupa

0

Chciałem napisać program, który oblicza mi pole powierzchni ostrosłupa. Niestety wywala mi jakiś błąd i nie wiem dlaczego. Używam Dev-C++, ale w Microsoft Visual Studio 10.0 Express jest to samo. Mój kod jest taki:

#include <cstdlib>
#include <iostream>
#include <math.h>
using namespace std;

//
class Prostokat
{
public:
Prostokat(); //konstruktor
int PodajWysokosc();
int PodajSzerokosc();
int Pole();
int Obwod();
void Rysuj();
void UstawWysokosc(int wysokosc);
void UstawSzerokosc(int szerokosc);
int m_Wysokosc;
int m_Szerokosc;
protected:
private:
};

// 

class Ostroslup: public Prostokat
{
public:
Ostroslup(); //konstruktor
int PodajWysokoscOstroslupa();
float PolePowierzchni();
float Objetosc();
void UstawWysokoscOstroslupa(int h);
protected:
private:
int m_WysokoscOstroslupa;
};

//

Prostokat::Prostokat()
{
m_Wysokosc=0;
m_Szerokosc=0;
}

int Prostokat::PodajWysokosc()
{
return m_Wysokosc;
}

int Prostokat::PodajSzerokosc()
{
return m_Szerokosc;
}

int Prostokat::Pole()
{
return m_Szerokosc*m_Wysokosc;
}

int Prostokat::Obwod()
{
return 2*m_Szerokosc+2*m_Wysokosc;
}

void Prostokat::Rysuj()
{
for (int i=0;i<m_Wysokosc;i++)
        {
        for (int j=0;j<m_Szerokosc;j++)
                cout<<"*";
        cout<<"\n";
        }
}

void Prostokat::UstawWysokosc(int wysokosc)
{
m_Wysokosc=wysokosc;
}

void Prostokat::UstawSzerokosc(int szerokosc)
{
m_Szerokosc=szerokosc;
}

//

Ostroslup::Ostroslup()
  {
  m_WysokoscOstroslupa=0;
   }

int Ostroslup::PodajWysokoscOstroslupa()
{
return m_WysokoscOstroslupa;
}

float Ostroslup::PolePowierzchni()
{
return
m_Wysokosc*m_Szerokosc*m_Wysokosc*sqrt(pow(m_WysokoscOstroslupa,2)+1/4*pow(m_Szerokosc,2))+m_Szerokosc*sqrt(pow(m_WysokoscOstroslupa,2)+1/4*pow(m_Wysokosc,2));
}

//

int main(int argc, char *argv[])
{	    Prostokat prost;
        Ostroslup o;
        prost.UstawWysokosc(3);
        prost.UstawSzerokosc(5);
        o.UstawWysokoscOstroslupa(6);
        o.UstawSzerokosc(3);
        o.UstawWysokosc(5);
        //cout<<o.PodajWysokosc()<<"\n"<<prost.Obwod()<<"\n";
        //prost.Rysuj();
        cout<<o.PolePowierzchni()<<"\n"<<o.Objetosc()<<"\n";
	system("pause");
	return 0;
}
0

jakiś błąd

Podstawowe pytanie: JAKI BŁĄD?

0

[Linker error] main.o:main.cpp:(.text+0x268): undefined reference to Ostroslup::UstawWysokoscOstroslupa(int)' [Linker error] main.o:main.cpp:(.text+0x29c): undefined reference to Ostroslup::Objetosc()'
collect2: ld returned 1 exit status
C:\Users\Szymon\Desktop\dev\Makefile.win [Build Error] [Projekt1.exe] Error 1 (if this is the only error: please check your library includes)

0
void UstawWysokoscOstroslupa(int h);
float Objetosc();

W kodzie nie zadeklarowałeś zdefiniowałeś tych funkcji.

0

Nie bardzo rozumiem o co chodzi ;/ Można pokazać poprawny kod? Wtedy będzie mi łatwiej dojść do zauważenia mojego błędu

0

Jeżeli masz deklarację klasy np."Prostokat":

class Prostokat
{
public:
Prostokat(); //konstruktor
int PodajWysokosc();
int PodajSzerokosc();
int Pole();
int Obwod();
void Rysuj();
void UstawWysokosc(int wysokosc);
void UstawSzerokosc(int szerokosc);
int m_Wysokosc;
int m_Szerokosc;
protected:
private:
};

To każda z tych funkcji musi być później zdefiniowana w kodzie:

Prostokat::Prostokat()
{
m_Wysokosc=0;
m_Szerokosc=0;
}
 
int Prostokat::PodajWysokosc()
{
return m_Wysokosc;
}
 
int Prostokat::PodajSzerokosc()
{
return m_Szerokosc;
}
 
int Prostokat::Pole()
{
return m_Szerokosc*m_Wysokosc;
}
 
int Prostokat::Obwod()
{
return 2*m_Szerokosc+2*m_Wysokosc;
}
 
void Prostokat::Rysuj()
{
for (int i=0;i<m_Wysokosc;i++)
        {
        for (int j=0;j<m_Szerokosc;j++)
                cout<<"*";
        cout<<"\n";
        }
}
 
void Prostokat::UstawWysokosc(int wysokosc)
{
m_Wysokosc=wysokosc;
}
 
void Prostokat::UstawSzerokosc(int szerokosc)
{
m_Szerokosc=szerokosc;
}

No, więc jeżeli masz taką deklarację klasy:

class Ostroslup: public Prostokat
{
public:
Ostroslup(); //konstruktor
int PodajWysokoscOstroslupa();
float PolePowierzchni();
float Objetosc();
void UstawWysokoscOstroslupa(int h);
protected:
private:
int m_WysokoscOstroslupa;
};

Do każda z zadeklarowanych funkcji musi być także w kodzie.
Zadeklarowane są:

Ostroslup::Ostroslup()
  {
  m_WysokoscOstroslupa=0;
   }
 
int Ostroslup::PodajWysokoscOstroslupa()
{
return m_WysokoscOstroslupa;
}
 
float Ostroslup::PolePowierzchni()
{
return
m_Wysokosc*m_Szerokosc*m_Wysokosc*sqrt(pow(m_WysokoscOstroslupa,2)+1/4*pow(m_Szerokosc,2))+m_Szerokosc*sqrt(pow(m_WysokoscOstroslupa,2)+1/4*pow(m_Wysokosc,2));
}

W klasie masz napisane, że chcesz mieć funkcje PodajWysokoscOstroslupa(), PolePowierzchni(), Objetosc() oraz UstawWysokoscOstroslupa(int h).
W kodzie są tylko PodajWysokoscOstroslupa() oraz PolePowierzchni().
Czyli musisz utworzyć funkcje Objetosc() oraz UstawWysokoscOstroslupa(int h).

float Ostroslup::Objetosc()
  {
//coś tam, coś tam
   }
 
void Ostroslup::UstawWysokoscOstroslupa(int h)
{
//coś tam, coś tam
}

Rozumiesz?

1 użytkowników online, w tym zalogowanych: 0, gości: 1