Как использовать структурный массив c как гибкий?

#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 и передайте соответствующий аргумент конструктору.