我有一个POO练习的问题。问题是:
添加到上一个练习的Point类中的两个公共内联 指示对象类型的实例数的方法 已被创造,有多少是在记忆中。注意:会计师必须 是班上的私人成员。证明调用getCantCreated 在创建任何对象之前使用getCantExisting方法。
但是我编译代码,出现错误。它' S:
error: cannot call member function 'int Punto::getCantCreada()' without object
我该如何解决?
我知道问题来自于没有实例化对象,但是如何在不创建对象的情况下使用此语句Punto::getCantCreada()
?
我读到这将通过静态变量解决,但在这种情况下:它的实现是什么样的?
代码是:
#include <iostream>
using namespace std;
class Punto{
private:
double mx;
double my;
int contInst = 0;
int contExist = 0;
void verificador1000();
public:
Punto(double x=0,double y=0);
Punto(const Punto& p);
~Punto();
int getCantCreada();
int getCantExistente();
};
Punto::Punto(double x,double y){
mx = x;
my = y;
contInst++;
contExist++;
verificador1000();
}
Punto::Punto(const Punto& p){
mx = p.mx;
my = p.my;
contInst++;
contExist++;
verificador1000();
}
void Punto::verificador1000(){
if(mx>1000) mx = 1000;
if(mx<-1000) mx = -1000;
if(my>1000) my = 1000;
if(my<-1000) my = -1000;
}
int Punto::getCantCreada(){
return contInst;
}
int Punto::getCantExistente(){
return contExist;
}
void ff (void){
Punto p,q,w;
Punto h(34);
Punto r=h;
cout <<"a. Puntos Creados:"<<Punto::getCantCreada()<< " - Existentes:"<< r.getCantExistente()<<endl;
}
int main(int argc, char *argv[]){
cout <<"1. Puntos Creados:"<<Punto::getCantCreada()<< " - Existentes:"<< Punto::getCantExistente()<<endl;
Punto p(12.34,-56.78);
cout <<"2. Puntos Creados:"<<p.getCantCreada()<< " - Existentes:"<< p.getCantExistente()<<endl;
Punto h(p);
cout <<"3. Puntos Creados:"<<Punto::getCantCreada()<< " - Existentes:"<< Punto::getCantExistente()<<endl;
ff();
cout <<"4. Puntos Creados:"<<Punto::getCantCreada()<< " - Existentes:"<< Punto::getCantExistente()<<endl;
std::cin.get();
return 0;
}
#include <iostream>
using namespace std;
class Punto
{
private:
double mx;
double my;
int contInst = 0;
int contExist = 0;
void verificador1000();
public:
Punto(double x=0,double y=0);
Punto(const Punto& p);
~Punto();
int getCantCreada();
int getCantExistente();
};
Punto::Punto(double x,double y)
{
mx = x;
my = y;
contInst++;
contExist++;
verificador1000();
}
Punto::Punto(const Punto& p)
{
mx = p.mx;
my = p.my;
contInst++;
contExist++;
verificador1000();
}
void Punto::verificador1000()
{
if(mx>1000)
mx = 1000;
if(mx<-1000)
mx = -1000;
if(my>1000)
my = 1000;
if(my<-1000)
my = -1000;
}
int Punto::getCantCreada()
{
return contInst;
}
int Punto::getCantExistente()
{
return contExist;
}
void ff (void)
{
Punto p,q,w;
Punto h(34);
Punto r=h;
cout <<"a. Puntos Creados:"<<Punto::getCantCreada()<< " - Existentes:"<< r.getCantExistente()<<endl;
}
int main(int argc, char *argv[])
{
cout <<"1. Puntos Creados:"<<Punto::getCantCreada()<< " - Existentes:"<< Punto::getCantExistente()<<endl;
Punto p(12.34,-56.78);
cout <<"2. Puntos Creados:"<<p.getCantCreada()<< " - Existentes:"<< p.getCantExistente()<<endl;
Punto h(p);
cout <<"3. Puntos Creados:"<<Punto::getCantCreada()<< " - Existentes:"<< Punto::getCantExistente()<<endl;
ff();
cout <<"4. Puntos Creados:"<<Punto::getCantCreada()<< " - Existentes:"<< Punto::getCantExistente()<<endl;
std::cin.get();
return 0;
}
答案 0 :(得分:2)
error: cannot call member function 'int Punto::getCantCreada()' without object
我该如何解决?我知道问题来自不实例化对象,但我如何使用此语句
Punto::getCantCreada()
如果您将contInst
设为静态,则可以getCantCreada()
为静态,然后您可以拨打Punto::getCantCreada()
:
class Punto
{
private:
...
static int contInst;
...
public:
...
static int getCantCreada();
...
};
int Punto::contInst = 0;