TL;DR: Jak dodać właściwości klasy za pomocą gettera w funkcji w klasie?
Witam, mam następujący problem:
#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std;
class Sruba
{
double a;
double h;
double r;
double ro;
public:
Sruba()
{
a=0;
h=0;
r=0;
ro=0;
}
//konstruktor samokopiujacy;
Sruba(const Sruba &wzor)
{
a=wzor.a;
r=wzor.r;
h=wzor.h;
ro=wzor.ro;
}
Sruba(char znak)
{
cout<<"Podaj wartosc dlugosci boku[cm]: ";
cin>>a;
cout<<"Podaj wysokosc sruby[cm]: ";
cin>>h;
cout<<"Podaj promien gwu[cm]: ";
cin>>r;
cout<<"Podaj gestosc [g/cm^3]: ";
cin>>ro;
}
Sruba(double a1, double h1, double r1, double ro1)
{
a=a1;
h=h1;
r=r1;
ro=ro1;
}
//gettery
double getA()
{
return a;
}
double getH()
{
return h;
}
double getR()
{
return r;
}
double getRo()
{
return ro;
}
//settery
void setA(double NewA)
{
a=NewA;
}
void SetR(double NewR)
{
r=NewR;
}
void setH(double NewH)
{
h=NewH;
}
void setRo(double NewRo)
{
ro=NewRo;
}
//oblicz wage
double waga()
{
return h.getH()*ro.getRo()*((3*pow(a.getA(),2.0)*sqrt(3)/2)-(3.14*pow(r.getR(),2.0)));
}
//info
void info()
{
cout<<"Wymiary srubki: "<<a<<"cm na "<<h<<"cm"<<endl;
cout<<"Promien gwintu: "<<r<<"cm"<<endl;
cout<<"Gestosc materialu: "<<ro<<" g/cm. "<<endl;
cout<<"Waga srubki: "<<waga()<<endl;
}
};
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char** argv) {
Sruba a=Sruba(5,20,3,5);
Sruba(';');
cout<<a.waga()<<endl;
a.info();
return 0;
}
Jak widać w kodzie, na chwilę obecną próbuję wykonać działanie na wartościach z klasy Srubka w funkcji waga(), ale nie mogę tego zrobić - pierwsza myśl -> nie mogą być zwykłe nazwy zmiennych, ponieważ są prywatne, więc kiszka, muszę użyć getterów. Gdy już tak zrobiłem, okazuje się że wyskakuje następujący błąd:
In member function 'double Sruba::waga()':
97 12 [Error] request for member 'getH' in '((Sruba*)this)->Sruba::h', which is of non-class type 'double'
97 22 [Error] request for member 'getRo' in '((Sruba*)this)->Sruba::ro', which is of non-class type 'double'
97 40 [Error] request for member 'getA' in '((Sruba*)this)->Sruba::a', which is of non-class type 'double'
97 75 [Error] request for member 'getR' in '((Sruba*)this)->Sruba::r', which is of non-class type 'double'
Z tego co rozumiem, błąd występuje ponieważ gettery są double, a klasa nie(???). Na zajęciach takie rozwiązanie w funkcji waga() działało bez problemu(lub tak naprawdę to wszystko jest ok, tylko ja gdzieś namachałem za dużo nawiasów i nie mogę ich znaleźć). Chcę, aby funkcja waga() wykonywała obliczenia na liczbach wprowadzonych za pomocą akcesora Sruba(char znak).
Mam nadzieję, że problem wytłumaczyłem dobrze.
Pozdrawiam, radek024.