@wb_by
Учусь

Что не так с инициализацией массива?

Код всей программы:

#include <iostream>
#include <cmath>

using namespace std;

/*circle{x,y,r}
x и y - центр окружности, r - радиус*/

/*dots{n}{x,y}*/

const int n = 4;

void findDotsInCircle(double** dotsInCircle,double** dots, double* circle) {
    int k = 0;
    double a = circle[0];
    double b = circle[1];
    double r = circle[3];
    
    for (int i = 0; i < n; i++) {
        double x = dots[i][0];
        double y = dots[i][1];
        if (pow(a - x, 2) + pow(b - y, 2) < (r * r)) {
            dotsInCircle[k][0] = x;
            dotsInCircle[k][1] = y;
            k++;
        }
    }
}

int main(){
    
    double circle[3] = { 2,2,1 };
    double** dots = new double* [n]; //вот эта тварь не работает
    for (int i = 0; i < n; i++) { 
        dots[i] = new double[2];
    };
    dots = {
        {0,0},
        {1.5,2.5},
        {2.5,1.5},
        {4,3}
    };
    double** dotsInCircle = new double* [n];
    for (int i = 0; i < n; i++) {
        dotsInCircle[i] = new double[2];
    };

    findDotsInCircle(dotsInCircle, dots, circle);

    for (int i = 0; i < n; i++) {
        cout << i + 1 << ": [" << dotsInCircle[i][0] << "] [" << dotsInCircle[i][1] << "]" << endl;
    }

    return 0;
}


Проблема с типами, не могу понять почему компилятор ругается.

Сначала я инициализировал массив double dots[n][2] и сразу присваивал значение. На это компилятор отвечает, что аргументом функции findDotsInCircle не может быть double [4][2]. Я вот это ваще не понял если честно. Ладно...

Переделал инициализацию... Сейчас по моей логике я сначала инициализирую массив как double**, а затем выделяю память. Но теперь он плюется на присвоение значения, мол, это СКАЛЯРНАЯ величина. Где ошибка? Почему это происходит вообще?
  • Вопрос задан
  • 63 просмотра
Решения вопроса 1
vt4a2h
@vt4a2h Куратор тега C++
Senior software engineer (C++/Qt/boost)
C++, не С. Хватит страдать, ну не пишут так уже давным давно. Вот, пользуйтесь:
std::vector<std::vector<double>>  dots = { {0, 0},  {1.5, 2.5},  {2.5, 1.5},  {4, 3}  };

Это просто работает. Равно как использование std::vector вместо одномерных массивов, или std::array, если размер известен заранее.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы