#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:
Вот ошибки в вашем исходном коде:
- В основной функции вы не вызывали этот метод getQuant() с объектом. Вам нужно будет вызвать метод getQuant() с объектом, чтобы исправить эту ошибку.
- Первая ошибка в массиве методов::getQuant()
Чтобы сравнить x с xp, вам нужно будет позвонить getSphere(i).get_x() <= xp
, потому что ваш класс массива не содержит элемента данных x, и только класс Sphere содержит элемент данных x. Таким образом, вам нужно будет получить доступ к элементу данных x через объект класса Sphere.
- Вторая ошибка в массиве методов::getQuant()
Вы написали «quant «, но quant определяется где угодно. Я думаю, что вы допустили опечатку и должны были вместо этого ввести «количество «.
- Третья ошибка в массиве методов::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 метода выше были исправлены и работают правильно, как я проверил. Пожалуйста, дайте мне знать, если у вас возникнут какие-либо проблемы.