#c
#c
Вопрос:
Что мне делать, если я хочу гибко использовать структурный массив? Я сделал свой код, как показано ниже, и попробовал Triangle и Rectangular.. Треугольник был успешным, но когда я попробовал прямоугольный, я получил сообщения об ошибках.
struct C2D {
double x, y;
};
class Polygon {
int point;
std::vector<C2D> arr;
public:
Polygon(int point_, C2D arr_[]) : arr(point_) {
point = point_;
memcpy(arr.data(), arr_, sizeof(C2D) * point);
};
void print() const {
for (int i = 0; i < point; i ) {
cout << arr[i].x << " " << arr[i].y << endl;
}
};
};
int main() {
int point;
C2D c2d[3];
cout << "point : ";
cin >> point;
cout << endl;
vector<C2D>c2d(point);
for (int i = 0; i < point; i ) {
cout << i 1 << "x : ";
cin >> c2d[i].x;
cout << i 1 << "y : ";
cin >> c2d[i].y;
cout << endl;
}
cout << endl;
Polygon p(point, c2d);
p.print();
return 0;
}
Комментарии:
1. Какую ошибку вы получали?
Ответ №1:
Проблема в том, что вы используете одно и то же имя для
C2D c2d[3];
и
vector<C2D>c2d(point);
Однако в вашем коде есть несколько других проблем, таких как использование C-массивов в C . Рассмотрите возможность использования std::vector
, например, так:
#include <iostream>
#include <vector>
struct C2D {
double x, y;
};
class Polygon {
std::vector<C2D> coordinates;
public:
explicit Polygon(const std::vector<C2D> amp;coords) : coordinates(coords) {}
void print() const {
for (const auto amp;c : coordinates) {
std::cout << c.x << " " << c.y << "n";
}
}
};
int main() {
int point;
std::cout << "point : ";
std::cin >> point;
std::cout << "n";
std::vector<C2D> coordinates(point);
for (int i = 0; i < point; i ) {
std::cout << i 1 << "x : ";
std::cin >> coordinates[i].x;
std::cout << i 1 << "y : ";
std::cin >> coordinates[i].y;
std::cout << "n";
}
std::cout << "n";
Polygon p(coordinates);
p.print();
}
Ответ №2:
Согласно вашему коду, вы объявили имя переменной c2d, одно из которых — тип массива C2D, а другое — вектор C2D. какова цель двух имен переменных, которые вы объявили. Мое предложение состоит в том, чтобы выделить переменную c2d на основе количества точек и передать полигону. Насколько я понимаю, измените свой конструктор polygon с помощью параметра array или vector и передайте соответствующий аргумент конструктору.