У функции zamena
первый параметр объявлен, как имеющий тип int **
int zamena(int** A , int N, int M, int min , int max){
^^^^^^^
Вы вызываете эту функцию с аргументом, имеющим тип int *
zamena(&Arr[0][0], N, M, min, max);
^^^^^^^^^^
так как тип элемента массива Arr[0][0]
имеет тип int
, а указатель на этот эдемент массива &Arr[0][0]
имеет тип int *
.
Не существует неявного преобразования из типа int *
в тип int **
, да и в данном случае это бессмысленно.
Так как вы используете массивы переменной длины, которые, кстати сказать, не поддерживаются стандартом C++, то попробуйте объявить функцию следующим образом
int zamena( int N, int M, int ( *A )[M] , int min , int max){
и вызывайте ее как
zamena( N, M, Arr, min, max);
Было бы проще и соответствовало бы стандарту C++ использовать стандартный контейнер std::vector<std::vector<int>>
вместо массива переменной длины.
#include "stdio.h"
#include "conio.h"
void swap(int *x,int *y);
void main()
{
int a=10,b=20;
swap(a,b);
printf("value of a=%d and b=%d");
getch();
}
void swap(int *x,int *y)
{
if(x!=y)
{
*x ^= *y;
*y ^= *x;
*x ^= *y;
}
}
// I’m getting .. cann’t convert int to int * …
can anybody tell me why so . and how to solve it
regards.
hoping for quick and positive response.
JeremyP
84.2k15 gold badges123 silver badges161 bronze badges
asked Sep 6, 2010 at 19:29
Vishwanath DalviVishwanath Dalvi
35.1k41 gold badges122 silver badges154 bronze badges
6
Your call to swap()
should include ampersands:
swap(&a,&b);
swap
is expecting pointers to int
, so you need to take a
and b
‘s addresses when passing them in.
answered Sep 6, 2010 at 19:31
Graham PerksGraham Perks
22.9k8 gold badges59 silver badges82 bronze badges
4
Султан 4 / 4 / 0 Регистрация: 11.03.2012 Сообщений: 120 |
||||
1 |
||||
11.03.2012, 16:46. Показов 13047. Ответов 25 Метки нет (Все метки)
Помогите разобраться,почему вылазит ошибка [C++ Error] Unit1.cpp(34): E2034 Cannot convert ‘int’ to ‘int *’ С++ начал недавно изучать…поэтому часто возникают не понятные мне ошибки,а почему не понимаю)
0 |
dimcoder Полярный 476 / 448 / 158 Регистрация: 11.09.2011 Сообщений: 1,156 |
||||||||
11.03.2012, 16:49 |
2 |
|||||||
на это
1 |
4 / 4 / 0 Регистрация: 11.03.2012 Сообщений: 120 |
|
11.03.2012, 16:53 [ТС] |
3 |
Спасибо)Все заработало)
0 |
LVV 155 / 137 / 46 Регистрация: 15.02.2010 Сообщений: 750 |
||||
11.03.2012, 16:59 |
4 |
|||
Ну, вот так работает.
1 |
4 / 4 / 0 Регистрация: 11.03.2012 Сообщений: 120 |
|
11.03.2012, 17:30 [ТС] |
5 |
Ну, вот так работает. Почему код не очень?
0 |
155 / 137 / 46 Регистрация: 15.02.2010 Сообщений: 750 |
|
16.03.2012, 22:12 |
6 |
Султан, сформулируйте задачу, которую Вы здесь решили, и я отвечу почему «код не очень…»
0 |
4 / 4 / 0 Регистрация: 11.03.2012 Сообщений: 120 |
|
16.03.2012, 22:50 [ТС] |
7 |
Написать программу,которая позволяет пользователю вводить целые числа, а затем сохранять их в массиве типа int.Напишите функцию maxint(), которая, обрабатывает элементы массива один за другим, находит наибольший. Функция должна принимать в качестве аргумента адрес массива и количество элементов в нем, а возвращать индекс наибольшего элемента.Программа должна вызвать эту функцию, а затем вывести наибольший элемент и его индекс.
0 |
LVV 155 / 137 / 46 Регистрация: 15.02.2010 Сообщений: 750 |
||||
17.03.2012, 22:29 |
8 |
|||
Ну, я бы сделал так:
(создано и отлажено в MVS 2010)
0 |
Султан 4 / 4 / 0 Регистрация: 11.03.2012 Сообщений: 120 |
||||
18.03.2012, 00:52 [ТС] |
9 |
|||
Хм.Ну в принципе да…на много лучше моего… Непонятны только 2 строчки.
интуитивно конечно понятно,но как этим пользоваться…не понятно(
0 |
155 / 137 / 46 Регистрация: 15.02.2010 Сообщений: 750 |
|
18.03.2012, 08:18 |
10 |
setlocale(0,»»); — включение кодировки, для отображения кирилицы в консольном окне. int *M = new int [n]; — описание динамического целочисленного массива М из n элементов. Поскольку n — вводится пользователем, и не является константнім выражением, то int M[n]; не прокатит, нужно только через new:
1 |
4 / 4 / 0 Регистрация: 11.03.2012 Сообщений: 120 |
|
18.03.2012, 14:35 [ТС] |
11 |
Жаль setlocale(0,»»); у меня не заработала.Все так же русские символы жутко отображаются.
0 |
155 / 137 / 46 Регистрация: 15.02.2010 Сообщений: 750 |
|
19.03.2012, 08:43 |
12 |
Между кавычками не должно быть пробела. (ноль запятая кавычки кавычки) А вообще-то вот: [cut]
0 |
Султан 4 / 4 / 0 Регистрация: 11.03.2012 Сообщений: 120 |
||||||||
19.03.2012, 19:49 [ТС] |
13 |
|||||||
Попробовал и setlocale(LC_ALL,»Russian»); и setlocale(0,»»); и
ни одна не заработала.Так что продолжаю пользоваться не совсем удобной,но рабочей структурой
0 |
sbnm 0 / 0 / 0 Регистрация: 02.01.2013 Сообщений: 11 |
||||
09.01.2013, 17:11 |
14 |
|||
[CPP]LVV, скажите, в чем тогда у меня ошибка?
Добавлено через 19 минут
0 |
Schizorb 512 / 464 / 81 Регистрация: 07.04.2012 Сообщений: 869 Записей в блоге: 1 |
||||
09.01.2013, 17:41 |
15 |
|||
sbnm, выделите память под матрицу динамически. Вместо 80 строки:
Сразу две проблемы решатся, и с передачей в функцию, и с тем, что размеры матрицы m и n должны были быть константами.
1 |
0 / 0 / 0 Регистрация: 02.01.2013 Сообщений: 11 |
|
09.01.2013, 17:45 |
16 |
размеры матрицы не должны быть константами. Добавлено через 2 минуты
0 |
Schizorb 512 / 464 / 81 Регистрация: 07.04.2012 Сообщений: 869 Записей в блоге: 1 |
||||
09.01.2013, 17:46 |
17 |
|||
sbnm,
Стандарт языка требует, чтобы n и m были const. То что ваш компилятор такое пропустил, это его проблемы. Поэтому правильнее все же выделять динамически память, если размеры не известны на этапе компиляции.
0 |
0 / 0 / 0 Регистрация: 02.01.2013 Сообщений: 11 |
|
09.01.2013, 17:49 |
18 |
Schizorb, не, че то вы путаете, как раз через указатели решается проблема непостоянного размера массивов, если бы размер был постоянный, все было бы проще.
0 |
Schizorb 512 / 464 / 81 Регистрация: 07.04.2012 Сообщений: 869 Записей в блоге: 1 |
||||
09.01.2013, 17:53 |
19 |
|||
как раз через указатели решается проблема непостоянного размера массивов Значит вы не так меня поняли.
http://codepad.org/da6upi6A
0 |
sbnm 0 / 0 / 0 Регистрация: 02.01.2013 Сообщений: 11 |
||||
09.01.2013, 17:56 |
20 |
|||
вот так я имею ввиду
0 |
- Remove From My Forums
-
Question
-
So after trying to compile this source code given by my c++ 1 professor, this error came out
lab4bapp.cpp(7) : error C2440: ‘=’ : cannot convert from ‘int’ to ‘int *’
Source:
#include<iostream>
using std::cout;
void f(int * ptr){
*ptr=2;
ptr=10000;
}int main(){
int x=1;
int *p=&x;
f(p);
cout<<x<<«n»
<<p<<«n»;system («Pause»);
}
Answers
-
The error message is correct and the reason for it seems obvious.
Did you have a question?
-
Marked as answer by
Wednesday, January 7, 2009 6:41 AM
-
Marked as answer by
According the prototype of f
and the usage pattern for its x
argument, the function expects this argument to be a pointer to the
first element of an array of pointers to the first elements of arrays of
int
. However, the matrix in main()
is defined as an array of arrays
of int
. If you try to pass this to a function, the matrix will decay
into a pointer to an array of int
. That’s not what you want.
If you want both dimensions of the matrix to be variable, the only
simple solution I see is to build an extra array of pointers (pointing
to the matrix rows) and pass that array to the function
int main() {
int x[16][128];
// Build an array of pointers to rows.
int *px[16];
for (int i = 0; i < 16; i++)
px[i] = x[i];
f(px, 16, 128);
}
For more information on this, see the section Arrays and Pointers in
the C FAQ, and more specifically the questions 6.16 (How can I
dynamically allocate a multidimensional array?) and 6.19 (How do I write
functions which accept two-dimensional arrays when the width is not
known at compile time?).