P
Piotre Ugrumov
I have tried to modify my exercise about the simulation of the life in the
savannah. Now I have only 2 errors but I don't comprehend how resolve these
errors. If I try to call the method getX() and getY() of the class Animale
from the class Leone, the compiler return to me the same errors.
These are the errors:
c:\Documents and Settings\Angelo\Documenti\Visual Studio
Projects\Savana\Leone.cpp(36) : error C2248: "Animale::x": impossible to
enter to a protected member declared in the class "Animale"
c:\Documents and Settings\Angelo\Documenti\Visual Studio
Projects\Savana\Animale.h(22): see the declaration of "Animale::x"
c:\Documents and Settings\Angelo\Documenti\Visual Studio
Projects\Savana\Animale.h(4): vedere la dichiarazione di "Animale"
c:\Documents and Settings\Angelo\Documenti\Visual Studio
Projects\Savana\Leone.cpp(36) : error C2248: "Animale::y": impossible to
enter to a protected member declared in the class "Animale"
c:\Documents and Settings\Angelo\Documenti\Visual Studio
Projects\Savana\Animale.h(22): see the declaration of "Animale::y"
c:\Documents and Settings\Angelo\Documenti\Visual Studio
Projects\Savana\Animale.h(4): see the declaration of "Animal
How can I resolve definitively the problems?
Thanks.
Here there are the classes Animale, Leone and Zebra:
#pragma once
class Animale
{
public:
Animale(double xx, double yy, double dire);
void setX(double xx);
void setY(double yy);
void setVel(double vel);
void setDir(double dire);
void setStatus(bool);
double getVista();
double getX();
double getY();
double getDir();
bool getStatus();
double distanza (Animale &a);
virtual void print();
~Animale(void);
protected:
double angoloCong(Animale &a);
double x, y, dir;
static const double MAX_VISTA;
bool status;
int zonzo;
double dist;
};
#include "StdAfx.h"
#include ".\animale.h"
#include <iostream>
#include <cmath>
using namespace std;
const double Animale::MAX_VISTA=50;
Animale::Animale(double xx, double yy, double dire)
{
setX(x);
setY(y);
setDir(dire);
setStatus(true);
zonzo=30;
}
void Animale::setX(double xx){
x=xx;
}
void Animale::setY(double yy){
y=yy;
}
void Animale::setDir(double dire){
dir=dire;
}
void Animale::setStatus(bool s){
status=s;
}
double Animale::getX(){
return x;
}
double Animale::getY(){
return y;
}
double Animale::getDir(){
return dir;
}
double Animale::getVista(){
return MAX_VISTA;
}
void Animale:rint(){
cout<<"Posizione: ("<<x<<", "<<y<<")"<<endl;
cout<<"Direzione: "<<", "<<dir<<endl;
if(status==true)
cout<<"Ottima salute, è vivo"<<endl;
else
cout<<"Potrebbe andare meglio è morto"<<endl;
}
double Animale::distanza(Animale &a){
dist=sqrt((x-a.x)*(x-a.x)+(y-a.y)*(y-a.y));
return dist;
}
bool Animale::getStatus(){
return status;
}
double Animale::angoloCong(Animale &a){
double dx=x-a.x;
double dy=y-a.y;
double angolo = atan2(dy, dx);
return angolo;
}
Animale::~Animale(void)
{
}
#pragma once
#include "animale.h"
class Zebra;
class Leone :
public Animale
{
public:
Leone();
Leone(double xx, double yy, double dire);
double getVel();
double getCor();
void vivi();
void insegui(Zebra &);
virtual void print();
~Leone(void);
protected:
void muovi();
static const double v, c;
long resistenza;
};
#include "StdAfx.h"
#include ".\leone.h"
#include "Zebra.h"
#include <cmath>
#include <iostream>
using namespace std;
const double Leone::c=14;
const double Leone::v=1.2;
Leone::Leone():Animale(0, 0, 0){
Animale::setStatus(true);
resistenza=100000;
}
Leone::Leone(double xx, double yy, double dire):Animale(xx, yy, dire)
{
Animale::setStatus(true);
resistenza=100000;
}
double Leone::getVel(){
return v;
}
double Leone::getCor(){
return c;
}
void Leone::insegui(Zebra &z){
x+=cos(Animale::angoloCong(z))*c;
y+=sin(Animale::angoloCong(z))*c;
if((x==z.x) && (x==z.y)){
z.setStatus(false);
resistenza=100000;
}
}
void Leone::muovi(){
x+=cos(dir)*v;
y+=sin(dir)*v;
}
void Leone::vivi(){
--zonzo;
--resistenza;
if(zonzo!=0 && resistenza!=0){
muovi();
}else if(zonzo==0 && resistenza!=0){
setDir(rand() % 360);
}else if(resistenza==0)
setStatus(false);
}
void Leone:rint(){
cout<<"Leone: "<<endl;
Animale:rint();
}
Leone::~Leone(void)
{
}
#pragma once
#include "animale.h"
#include "Leone.h"
class Zebra :
public Animale
{
public:
Zebra();
Zebra(double xx, double yy, double dire);
void scappa(Leone &);
void vivi();
virtual void print();
~Zebra(void);
protected:
void muovi();
static const double v, c;
};
#include "StdAfx.h"
#include ".\zebra.h"
#include "Leone.h"
#include <cmath>
#include <iostream>
using namespace std;
const double Zebra::v=1.1;
const double Zebra::c=10;
Zebra::Zebra():Animale(0, 0, 0){
Animale::setStatus(true);
}
Zebra::Zebra(double xx, double yy, double dire):Animale(xx, yy, dire)
{
Animale::setStatus(true);
}
void Zebra::muovi(){
x+=cos(dir)*v;
y+=sin(dir)*v;
}
void Zebra::scappa(Leone &l){
x+=cos(Animale::angoloCong(l))*c;
y+=sin(Animale::angoloCong(l))*c;
}
void Zebra::vivi(){
--zonzo;
if(zonzo!=0){
muovi();
}else
setDir(rand() % 360);
}
void Zebra:rint(){
cout<<"Zebra: "<<endl;
Animale:rint();
}
Zebra::~Zebra(void)
{
}
savannah. Now I have only 2 errors but I don't comprehend how resolve these
errors. If I try to call the method getX() and getY() of the class Animale
from the class Leone, the compiler return to me the same errors.
These are the errors:
c:\Documents and Settings\Angelo\Documenti\Visual Studio
Projects\Savana\Leone.cpp(36) : error C2248: "Animale::x": impossible to
enter to a protected member declared in the class "Animale"
c:\Documents and Settings\Angelo\Documenti\Visual Studio
Projects\Savana\Animale.h(22): see the declaration of "Animale::x"
c:\Documents and Settings\Angelo\Documenti\Visual Studio
Projects\Savana\Animale.h(4): vedere la dichiarazione di "Animale"
c:\Documents and Settings\Angelo\Documenti\Visual Studio
Projects\Savana\Leone.cpp(36) : error C2248: "Animale::y": impossible to
enter to a protected member declared in the class "Animale"
c:\Documents and Settings\Angelo\Documenti\Visual Studio
Projects\Savana\Animale.h(22): see the declaration of "Animale::y"
c:\Documents and Settings\Angelo\Documenti\Visual Studio
Projects\Savana\Animale.h(4): see the declaration of "Animal
How can I resolve definitively the problems?
Thanks.
Here there are the classes Animale, Leone and Zebra:
#pragma once
class Animale
{
public:
Animale(double xx, double yy, double dire);
void setX(double xx);
void setY(double yy);
void setVel(double vel);
void setDir(double dire);
void setStatus(bool);
double getVista();
double getX();
double getY();
double getDir();
bool getStatus();
double distanza (Animale &a);
virtual void print();
~Animale(void);
protected:
double angoloCong(Animale &a);
double x, y, dir;
static const double MAX_VISTA;
bool status;
int zonzo;
double dist;
};
#include "StdAfx.h"
#include ".\animale.h"
#include <iostream>
#include <cmath>
using namespace std;
const double Animale::MAX_VISTA=50;
Animale::Animale(double xx, double yy, double dire)
{
setX(x);
setY(y);
setDir(dire);
setStatus(true);
zonzo=30;
}
void Animale::setX(double xx){
x=xx;
}
void Animale::setY(double yy){
y=yy;
}
void Animale::setDir(double dire){
dir=dire;
}
void Animale::setStatus(bool s){
status=s;
}
double Animale::getX(){
return x;
}
double Animale::getY(){
return y;
}
double Animale::getDir(){
return dir;
}
double Animale::getVista(){
return MAX_VISTA;
}
void Animale:rint(){
cout<<"Posizione: ("<<x<<", "<<y<<")"<<endl;
cout<<"Direzione: "<<", "<<dir<<endl;
if(status==true)
cout<<"Ottima salute, è vivo"<<endl;
else
cout<<"Potrebbe andare meglio è morto"<<endl;
}
double Animale::distanza(Animale &a){
dist=sqrt((x-a.x)*(x-a.x)+(y-a.y)*(y-a.y));
return dist;
}
bool Animale::getStatus(){
return status;
}
double Animale::angoloCong(Animale &a){
double dx=x-a.x;
double dy=y-a.y;
double angolo = atan2(dy, dx);
return angolo;
}
Animale::~Animale(void)
{
}
#pragma once
#include "animale.h"
class Zebra;
class Leone :
public Animale
{
public:
Leone();
Leone(double xx, double yy, double dire);
double getVel();
double getCor();
void vivi();
void insegui(Zebra &);
virtual void print();
~Leone(void);
protected:
void muovi();
static const double v, c;
long resistenza;
};
#include "StdAfx.h"
#include ".\leone.h"
#include "Zebra.h"
#include <cmath>
#include <iostream>
using namespace std;
const double Leone::c=14;
const double Leone::v=1.2;
Leone::Leone():Animale(0, 0, 0){
Animale::setStatus(true);
resistenza=100000;
}
Leone::Leone(double xx, double yy, double dire):Animale(xx, yy, dire)
{
Animale::setStatus(true);
resistenza=100000;
}
double Leone::getVel(){
return v;
}
double Leone::getCor(){
return c;
}
void Leone::insegui(Zebra &z){
x+=cos(Animale::angoloCong(z))*c;
y+=sin(Animale::angoloCong(z))*c;
if((x==z.x) && (x==z.y)){
z.setStatus(false);
resistenza=100000;
}
}
void Leone::muovi(){
x+=cos(dir)*v;
y+=sin(dir)*v;
}
void Leone::vivi(){
--zonzo;
--resistenza;
if(zonzo!=0 && resistenza!=0){
muovi();
}else if(zonzo==0 && resistenza!=0){
setDir(rand() % 360);
}else if(resistenza==0)
setStatus(false);
}
void Leone:rint(){
cout<<"Leone: "<<endl;
Animale:rint();
}
Leone::~Leone(void)
{
}
#pragma once
#include "animale.h"
#include "Leone.h"
class Zebra :
public Animale
{
public:
Zebra();
Zebra(double xx, double yy, double dire);
void scappa(Leone &);
void vivi();
virtual void print();
~Zebra(void);
protected:
void muovi();
static const double v, c;
};
#include "StdAfx.h"
#include ".\zebra.h"
#include "Leone.h"
#include <cmath>
#include <iostream>
using namespace std;
const double Zebra::v=1.1;
const double Zebra::c=10;
Zebra::Zebra():Animale(0, 0, 0){
Animale::setStatus(true);
}
Zebra::Zebra(double xx, double yy, double dire):Animale(xx, yy, dire)
{
Animale::setStatus(true);
}
void Zebra::muovi(){
x+=cos(dir)*v;
y+=sin(dir)*v;
}
void Zebra::scappa(Leone &l){
x+=cos(Animale::angoloCong(l))*c;
y+=sin(Animale::angoloCong(l))*c;
}
void Zebra::vivi(){
--zonzo;
if(zonzo!=0){
muovi();
}else
setDir(rand() % 360);
}
void Zebra:rint(){
cout<<"Zebra: "<<endl;
Animale:rint();
}
Zebra::~Zebra(void)
{
}