Много ошибок в классах с конструкторами и функциями

#c #arrays #class #dynamic

Вопрос:

Вот код для моего файла

 #include <iostream>
 #include <string>
 #include <cstdio>
 #include <fstream>



 class Sphere{
   private:
     int x;
     int y;
     int r;
   public:
     Sphere();
     void set_x(int first);
     void set_y(int second);
     void set_r(int radius);
     int get_x();
     int get_y();
     int get_r();
 };

 class Array{
   private:
     Sphere** spheres;
     int size;
     int maxsize=101;
   public:
     Array();
     ~Array();
     void addSphere(const Sphereamp; sphere);
     Sphereamp; getSphere(int index)const;
     int getQuant(int xp,int yp);
 };

int main(){
  Array spheres;
  for(int i=0;i<101;i  ){
    spheres.addSphere(Sphere());
  }
  getQuant(15,30);
  std::cout << "The programm made it to the end" << std::endl;
  return 0;
}

Sphere::Sphere(){
  x=rand()0;
  y=rand()0;
  r=rand()P;
}


void Sphere::set_x(int first){
  x=first;
}
void Sphere::set_y(int second){
  y=second;
}
void Sphere::set_r(int radius){
  r=radius;
}
int Sphere::get_x(){
  return x;
}
int Sphere::get_y(){
  return y;
}
int Sphere::get_r(){
  return r;
}

Array::Array():size(0){
  spheres=new Sphere*[maxsize];
}

Array::~Array(){
  for(int i=0;i<maxsize;i  ){
    delete spheres[i];
  }
  delete[] spheres;
}


void Array::addSphere( const Sphereamp; sphere){
  if(size<maxsize){
    spheres[size]=new Sphere();
    size  ;
  }else{
    std::cout << "nThe limit is exceeded at" << size << std::endl;
  }
}
int Array::getQuant(int xp,int yp){
  int quantity;
  for(int i=0;i<101;i  ){
    getSphere(i);
    if(this->x <= xp){
      if(this->y <=yp){
        quant  ;
      }
    }
  }
  std:cout << "The quantity of spheres that has centers inside the stated area is:" << quantity;
}

Sphereamp; Array::getSphere(int index)const{
  return *spheres[index];
}

 

Ну, эта программа должна работать следующим образом: сгенерируйте 101 число сфер(это не сфера, но это не имеет значения) со случайными числами координат центра и радиуса. затем он должен найти количество сфер, имеющих центры в определенной области координат. но у меня много ошибок. вот их текст.

 ./src/main.cpp:42:3: error: use of undeclared identifier 'getQuant'
  getQuant(15,30);
  ^
./src/main.cpp:97:14: error: no member named 'x' in 'Array'
    if(this->x <= xp){
       ~~~~  ^
./src/main.cpp:98:16: error: no member named 'y' in 'Array'
      if(this->y <=yp){
         ~~~~  ^
./src/main.cpp:99:9: error: use of undeclared identifier 'quant'
        quant  ;
        ^
./src/main.cpp:103:7: error: use of undeclared identifier 'cout'; did you mean 'std::cout'?
  std:cout << "The quantity of spheres that has centers inside the stated area is:" << quantity;
      ^~~~
      std::cout
 

можете ли вы помочь мне их решить?

Комментарии:

1. вы вызываете методы, но не в контексте объекта, например getQuant() вместо spheres.getQuant(); также я бы переименовал массив во что-то другое, чтобы избежать коллизий имен

2. Ваш код сбивает с толку. 1. x является частным Sphere , поэтому я предполагаю, что вы пытаетесь использовать sphere->get_x()

Ответ №1:

Просто следует за каждой ошибкой:

./src/main.cpp:42:3: ошибка: использование необъявленного идентификатора ‘getQuant’ getQuant(15,30);

В функции main() вы вызываете функцию getQuant , которая является частью Array класса , но вы вызываете ее как отдельную функцию (которая не завершается).

Вы, наверное, хотите:

 spheres->getQuant(15,30);
 

./src/main.cpp:97:14: ошибка: в «Массиве» нет элемента с именем «x»
, если(это->x >

В getQuant реализации у вас есть this->x , но Array нет x участника.


./src/main.cpp:99:9: ошибка: использование необъявленного идентификатора «quant» quant ;

В getQuant реализации у вас есть quant , но эта переменная не объявлена. Ты это имел в виду quantity ?


./src/main.cpp:103:7: ошибка: использование необъявленного идентификатора «cout»; вы имели в виду «std::cout»?

cout является частью <iostream> и поставляется с std именем. Вы должны позвонить std::cout или позвонить using std::cout;

Ответ №2:

Вот ошибки в вашем исходном коде:

  1. В основной функции вы не вызывали этот метод getQuant() с объектом. Вам нужно будет вызвать метод getQuant() с объектом, чтобы исправить эту ошибку.
  2. Первая ошибка в массиве методов::getQuant()

Чтобы сравнить x с xp, вам нужно будет позвонить getSphere(i).get_x() <= xp , потому что ваш класс массива не содержит элемента данных x, и только класс Sphere содержит элемент данных x. Таким образом, вам нужно будет получить доступ к элементу данных x через объект класса Sphere.

  1. Вторая ошибка в массиве методов::getQuant()

    Вы написали «quant «, но quant определяется где угодно. Я думаю, что вы допустили опечатку и должны были вместо этого ввести «количество «.

  2. Третья ошибка в массиве методов::getQuant()

Вы допустили опечатку, когда написали std:cout в конце этого метода. Правильный синтаксис-std::cout.

=========

Ниже приведен мой новый код, в котором я исправил все ошибки и убедился, что код хорошо компилируется и выполняется

 int Array::getQuant(int xp,int yp){
  int quantity;
  for(int i=0;i<101;i  ){
    //getSphere(i);
    if(getSphere(i).get_x() <= xp){
      if(getSphere(i).get_y() <=yp){
        quantity  ;
      }
    }
  }
  std:cout << "The quantity of spheres that has centers inside the stated area is:" << quantity;
}
 

==========

 int main(){
  Array spheres;
  for(int i=0;i<101;i  ){
    spheres.addSphere(Sphere());
  }
  spheres.getQuant(15,30); // I call getQuant() with an object to fix the error
  std::cout << "The programm made it to the end" << std::endl;
  return 0;
}
 

=============

Опять же, эти 2 метода выше были исправлены и работают правильно, как я проверил. Пожалуйста, дайте мне знать, если у вас возникнут какие-либо проблемы.