Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
winnisp
0 / 0 / 0
Регистрация: 10.09.2012
Сообщений: 25
#1

Двумерный массив - ошибка приведения типов - C++

21.06.2013, 13:04. Просмотров 264. Ответов 4
Метки нет (Все метки)

Приветсвую. Столкнулся с такой проблемой, точнее не с проблемой а с вопросом. допустим:
имеется функция Function;
C++
1
void    Function( double *(points[3]));
Которая что-то делает. Приводить определение не имеет смысла. При вызове ее:
C++
1
2
3
4
int     main(int argc, char **argv)
{
    Function(points);
}
Компилятор естессно ругается : Error 1 error C2664: 'Function' : cannot convert parameter 1 from 'double [20][3]' to 'double **' Массив имеет такой вид: double points[20][3]; В случае выделения под массив динамической памяти, передача его в функцию осуществляется как положено! Это одно из решений. Второе - использование шаблонов.
Объясните пожалуйста, почему с одномерными массивами, при создании его также фиксированным размером и передаче в функцию через указатель проблем не возникает?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2013, 13:04     Двумерный массив - ошибка приведения типов
Посмотрите здесь:

Ошибка приведения типов в MSVS 2008 - C++
for (AuraEffectList::const_iterator i......... ............. if (i==((AuraEffectList::const_iterator)NULL)) в линуксе компилируется...

Стили приведения типов - C++
Строка 38: что за странное объявление? Обычно аргументы заключаются в скобки. Строка 39: что за static_cast и последующий <Complex>? Как...

Перегрузка операторов приведения типов - C++
Доброго времени суток! Возник вопрос по перегрузке оператора преобразования типа const char*. Вот пример: class Integer { public: ...

Исправьте ошибку C2664 приведения типов - C++
#include "stdafx.h" #include <iostream> #include <fstream> #include <conio.h> using namespace std; void statistics(char...

Почему следует избегать явного приведения типов? (по возможности) - C++
Почему следует избегать явного приведения типов? (по возможности)

Используя перегрузку, написать функцию для выполнения приведения типов - C++
Используя перегрузку, написать функцию для выполнения, приведения типов, для следующих типов данных float, int, double, long.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
21.06.2013, 13:36     Двумерный массив - ошибка приведения типов #2
@winnisp, ну ясное дело ты хочешь передать динамический массив в болванку функции расчитанной по статический определённого размера. Решить проблему легко - 1е переписать все прототипы функций на динамический вариант передачи массива (короче напальцах везде в параметрах написать double ** array) а статические массивы передавать через спец указатель. Щас накидаю код покажу...
-=ЮрА=-
Заблокирован
Автор FAQ
21.06.2013, 13:44     Двумерный массив - ошибка приведения типов #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Вот код для примера
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
using namespace std;
 
void function(int m, int n, double ** arr);
 
int main()
{
    double a[2][3] = 
    {
        {1, 2, 3},
        {4, 5, 6}
    };
 
    double * ptr[2];
    ptr[0] = a[0];
    ptr[1] = a[1];
 
    cout<<"\tINPUT"<<endl;
    cout<<a[0][0]<<" "<<a[0][1]<<" "<<a[0][2]<<endl;
    cout<<a[1][0]<<" "<<a[1][1]<<" "<<a[1][2]<<endl;
 
    function(2, 3, ptr);
 
    cout<<"\tOUTPUT"<<endl;
    cout<<a[0][0]<<" "<<a[0][1]<<" "<<a[0][2]<<endl;
    cout<<a[1][0]<<" "<<a[1][1]<<" "<<a[1][2]<<endl;
    return 0;
}
 
void function(int m, int n, double ** arr)
{
    for(int i = 0; i < m; i++)
    for(int j = 0; j < n; j++)
        arr[i][j] += 2;
}
Миниатюры
Двумерный массив - ошибка приведения типов  
winnisp
0 / 0 / 0
Регистрация: 10.09.2012
Сообщений: 25
21.06.2013, 17:01  [ТС]     Двумерный массив - ошибка приведения типов #4
Да, такой вариант я не учел. По сути тоже самое что и создание динамических массивов. Но так я и не уловил в этом ответа на вопрос: "почему с одномерными массивами, при создании его также фиксированным размером и передаче в функцию через указатель проблем не возникает"?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.06.2013, 19:00     Двумерный массив - ошибка приведения типов
Еще ссылки по теме:

Константные и не константные ссылки. Приведения типов. Нужно уточнение - C++
Не очень понимаю в чем различие (2,3 строчки). int x = 10; double &amp;y = x; const double &amp;y = x; Почему для не...

Динамический массив структур. Ошибка преобразования типов - C++
Всем привет есть задачка на структуры. Нужно через структуру В сделать динамический массив структуры А. Написал функцию, но компилятор...

Двумерный массив. Где ошибка? - C++
Дана действительная квадратная матрица порядка N (N – нечетное), заполненная случайными числами, все элементы различны. Найти наибольший...

Ошибка в функции(двумерный массив) - C++
Доброй ночи помогите пожалуйста: Есть двумерный массив mass нужна функция для его просмотра: #include &lt;iostream&gt; using namespace std;...

двумерный массив, в чем ошибка? - C++
Все элементы столбца с минимальным элементом заменить максимальным элементом. Мне написали код, но тут проблема в библиотеках, или в...

Двумерный массив, где ошибка? - C++
Здравствуйте! Странная вещь получается, вроде все делаю правильно, пытался вывести двумерный массив, а оно ошибку выдает на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
21.06.2013, 19:00     Двумерный массив - ошибка приведения типов #5
Цитата Сообщение от winnisp Посмотреть сообщение
почему с одномерными массивами, при создании его также фиксированным размером и передаче в функцию через указатель проблем не возникает"?
- тем что в случае одномерного массива передаётся адрес первого элемента, в случае двумерного передаётся массив указателей на строки.
Yandex
Объявления
21.06.2013, 19:00     Двумерный массив - ошибка приведения типов
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru