Cannot convert int to int ошибка

У функции 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's user avatar

JeremyP

84.2k15 gold badges123 silver badges161 bronze badges

asked Sep 6, 2010 at 19:29

Vishwanath Dalvi's user avatar

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 Perks's user avatar

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 *’
[C++ Error] Unit1.cpp(34): E2342 Type mismatch in parameter ‘m’ (wanted ‘int *’, got ‘int’)

С++ начал недавно изучать…поэтому часто возникают не понятные мне ошибки,а почему не понимаю)

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
36
37
38
39
40
#pragma hdrstop
 
#include <iostream.h>
#include <conio.h>
#include <tchar.h>
//---------------------------------------------------------------------------
const int MAX = 100;
 
int maxint(int m[MAX],int kol)
{
    int maxis=0;
    for (int j = 0; j < kol; j++) {
        if (m[j]>m[maxis]) {maxis=j;}
    }
    return maxis;
}
 
#pragma argsused
int main(int argc, _TCHAR* argv[])
{
    wcout.imbue(locale(".866"));
 
 
    int masiv[MAX];
    int i=0;
    char fl='y';
    int maxindex;
    do
    {
        wcout<<L"nВведите число: "; cin>>masiv[i++];
        wcout<<L"Еще? y/n?";
    } while((fl=getche() != 'n') && (i<MAX));
 
    maxindex = maxint(masiv[MAX],i);
    wcout <<L"Число "<<masiv[maxindex]<<L" ,с индексом "
          <<maxindex<<L" является максимальным";
 
    getch();
    return 0;
}



0



dimcoder

Полярный

476 / 448 / 158

Регистрация: 11.09.2011

Сообщений: 1,156

11.03.2012, 16:49

2

C++
1
maxindex = maxint(masiv[MAX],i);

на это

C++
1
maxindex = maxint(masiv, i);



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

Ну, вот так работает.
Хотя код не очень…

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
36
37
38
39
40
41
#pragma hdrstop
 
#include <iostream>
#include <conio.h>
#include <tchar.h>
//---------------------------------------------------------------------------
const int MAX = 100;
 
int maxint(int m[MAX],int kol)
{
        int maxis=0;
        for (int j = 0; j < kol; j++) {
                if (m[j]>m[maxis]) {maxis=j;}
        }
        return maxis;
}
 
#pragma argsused
using namespace std;
int main(int argc, _TCHAR* argv[])
{
        wcout.imbue(locale(".866"));
 
 
        int masiv[MAX];
        int i=0;
        char fl='y';
        int maxindex;
        do
        {
                wcout<<L"nВведите число: "; cin>>masiv[i++];
                wcout<<L"Еще? y/n?";
        } while((fl=getche() != 'n') && (i<MAX));
 
        maxindex = max(masiv[MAX],i);
        wcout <<L"Число "<<masiv[maxindex]<<L" ,с индексом "
                  <<maxindex<<L" является максимальным";
 
        getch();
        return 0;
}



1



4 / 4 / 0

Регистрация: 11.03.2012

Сообщений: 120

11.03.2012, 17:30

 [ТС]

5

Цитата
Сообщение от LVV
Посмотреть сообщение

Ну, вот так работает.
Хотя код не очень…

Почему код не очень?



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

Ну, я бы сделал так:

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
36
37
#include <iostream>
using namespace std;
int maxint (int M[], int);
int main()
{
    setlocale(0,"");
    
    int n;
    cout << "введите n - количество чисел в массиве M. n=";
        cin >> n;
 
        int *M = new int [n];
        for (int i=0; i<n; i++)
        {
            cout << "введите " << i << "-й элемент массива. M["   << i << "] = ";
            cin >> M[i];
        }
 
 
        int index = maxint (M, n);
        cout << endl << "число " << M[index] << " с индексом " << index   << " является максимальным " << endl;
 
system ("pause");
return 0;
}
 
int maxint (int M[], int n)
{
    int maxM=M[0], N=0;
    for (int i=0; i<n; i++)
        if (maxM < M[i])
        {
             maxM = M[i];
             N=i;
        }
return N;
}

(создано и отлажено в MVS 2010)



0



Султан

4 / 4 / 0

Регистрация: 11.03.2012

Сообщений: 120

18.03.2012, 00:52

 [ТС]

9

Хм.Ну в принципе да…на много лучше моего…

Непонятны только 2 строчки.

C++
1
2
setlocale(0,"");
int *M = new int [n];

интуитивно конечно понятно,но как этим пользоваться…не понятно(



0



155 / 137 / 46

Регистрация: 15.02.2010

Сообщений: 750

18.03.2012, 08:18

10

setlocale(0,»»); — включение кодировки, для отображения кирилицы в консольном окне.

int *M = new int [n]; — описание динамического целочисленного массива М из n элементов.

Поскольку n — вводится пользователем, и не является константнім выражением,
int n;
cin >> 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

Между кавычками не должно быть пробела. (ноль запятая кавычки кавычки)
Или попробуйте: setlocale(LC_ALL,»Russian»);

А вообще-то вот: [cut]



0



Султан

4 / 4 / 0

Регистрация: 11.03.2012

Сообщений: 120

19.03.2012, 19:49

 [ТС]

13

Попробовал и setlocale(LC_ALL,»Russian»); и setlocale(0,»»); и

C++
1
2
3
#include <windows.h>
SetConsoleCP(1251);
SetConsoleOutputCP(1251);

ни одна не заработала.Так что продолжаю пользоваться не совсем удобной,но рабочей структурой

C++
1
2
3
4
5
6
7
#include <iostream.h>
using namespace std;
int main()
{
    wcout.imbue(locale(".866"));
    wcout << L"русский текст";
}



0



sbnm

0 / 0 / 0

Регистрация: 02.01.2013

Сообщений: 11

09.01.2013, 17:11

14

[CPP]LVV, скажите, в чем тогда у меня ошибка?

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
//Для заданной целочисленной матрицы найти максимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы.
#include <iostream>
#include <locale>
#include <iomanip>
#include <math.h>
#include <conio.h>
#include <time.h>
#include <cstdlib>
using namespace std;
 
int n,m;
int **A;
 
 // максимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы
void find_max(int **A, int a, int b)
{
  int t, t1 = 0, r = 0, t2;
    for(int i = 0; i < a ; i++)
    {
        for(int j = 0; j < b; j++)
        {
            t2 = A[i][j];
            A[i][j] = 0;
    
            for(int x = 0; x < a; x++)
            {
                for(int y = 0; y < b; y++)
                {
                    if(t2 == A[x][y])
                    {
                        t = A[x][y];
                    }
                    else
                        r++;
                }
 
                if(t1 > t)
                    t = t1;
            }
 
            t1 = t;
            A[i][j] = t2;
 
        }
    }
 
    double kof;
    kof = pow((double)a,4);
 
    if(r == kof)
        cout << "nnПовторяющихся элементов нет!";
    else
        cout << "nnМаксимальное из встречающихся более одного раза: " << t;
 
}
 
 
int main()
{
 cout << "nn1) Выберите способ заполнения матрицы: nn    Ввод с клавиатуры, нажмите - 1n    Заполнение случайными числами, нажмите - 2   ";
 int s; cin >> s;
 
  if((s!=1)&&(s!=2))
  {
    do
      {
        cout << "nОшибка ввода! Введите еще раз и нажмите ENTER - ";
        cin >> s;                
      }
    while ((s!=1)&&(s!=2));      
  }
 
 cout << "n2) Введите размер матрицыnn";
 cout << "   Количество строк - "; 
 cin >> n;
 cout << "   Количество столбцов - ";
 cin >> m; cout << "n";
 
 
 int matr[n][m];
 
 //ввод с клавиатуры
 if(s==1)
    {
         for(int i=0; i<n; i++)
        {
           for(int j=0; j<m; j++)
              {
                  cout << "n[" << i << "][" << j << "] - "; cin >> matr[i][j]; 
              }      
        }  
    } 
 //заполнение случайными числами 
 else if(s==2)
        {
            cout << "3) Введите максимальный размер случайного числа - ";
            int max; cin >> max; cout << "n"; 
             
            srand(time(NULL)); 
            for(int i=0; i<n; i++)
               {
                   for(int j=0; j<m; j++)             
                      {     
                         matr[i][j] =  rand()% max + 1;       
                      }       
               }   
               
 //вывод матрицы на экран
 for(int i=0; i<n; i++)
    {
        cout << endl;
        cout << "t";
         
       for(int j=0; j<m; j++)
           {
                cout << matr[i][j] << " "; 
           }   
        cout << "n";   
    }  
       }
 
A = new int *[n];
 
for (int i=0; i<n; i++)
{
   A[i] = new int [m];    
} 
 
     
 find_max(matr, n, m );     //ругается здесь, что не может преобразовать что то 
 
 
    
    getch();
    return 0;
    
}

Добавлено через 19 минут
Программа рабочая, когда все идет сплошным кодом, без выделения отдельной функции, там все правильно. После того как нахождение максимума было выделено в функцию все и остановилось; ошибка где то в передаче матрицы в функцию, вот не могу разобраться.



0



Schizorb

512 / 464 / 81

Регистрация: 07.04.2012

Сообщений: 869

Записей в блоге: 1

09.01.2013, 17:41

15

sbnm, выделите память под матрицу динамически. Вместо 80 строки:

C++
1
2
3
int ** matr = new int*[n];
for(int i = 0; i < n; ++i)
    matr[i] = new int[m];

Сразу две проблемы решатся, и с передачей в функцию, и с тем, что размеры матрицы m и n должны были быть константами.



1



0 / 0 / 0

Регистрация: 02.01.2013

Сообщений: 11

09.01.2013, 17:45

16

размеры матрицы не должны быть константами.

Добавлено через 2 минуты
Schizorb, спасибо вам ОГРОМНОЕ!!!! )



0



Schizorb

512 / 464 / 81

Регистрация: 07.04.2012

Сообщений: 869

Записей в блоге: 1

09.01.2013, 17:46

17

sbnm,

C++
1
2
int n, m;
int matr[n][m];

Стандарт языка требует, чтобы 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

Цитата
Сообщение от sbnm
Посмотреть сообщение

как раз через указатели решается проблема непостоянного размера массивов

Значит вы не так меня поняли.

C++
1
2
3
int size = 10;
int a[size]; // ошибка, т.к. size не константа
int * b = new int[size]; // нет ошибки, память выделяется динамически

http://codepad.org/da6upi6A



0



sbnm

0 / 0 / 0

Регистрация: 02.01.2013

Сообщений: 11

09.01.2013, 17:56

20

вот так я имею ввиду

C++
1
2
3
4
5
6
7
8
9
10
void f (int A[10][10])
{
   ...
}
 
int main()
{
    int B[10][10];
    f(B);
}



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

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?
).

Возможно, вам также будет интересно:

  • Candy сушильная машина ошибка loc
  • Candy сушильная машина ошибка e14
  • Candy стиральные машины ошибка е03 как устранить
  • Candy automatic tempo ошибка e02
  • Candy aquamatic ошибка e02 как исправить

  • Понравилась статья? Поделить с друзьями:
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии