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

E2034 Cannot convert 'int *' to 'int' - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 38, средняя оценка - 4.61
Султан
4 / 4 / 1
Регистрация: 11.03.2012
Сообщений: 114
11.03.2012, 16:46     E2034 Cannot convert 'int *' to 'int' #1
Помогите разобраться,почему вылазит ошибка

[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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2012, 16:46     E2034 Cannot convert 'int *' to 'int'
Посмотрите здесь:

[Linker error] undefined reference to `sterling(int, int, int)' C++
cannot convert int(*)() to int . . C++
cannot convert 'int' to 'int*' C++
C++ Написать функцию типа Beaty(int iA, int iB, int *pc)
C++ Сannot convert ‘int (*)[10]’ to ‘int*’ for argument ‘4’ to ‘int
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
11.03.2012, 16:49     E2034 Cannot convert 'int *' to 'int' #2
C++
1
maxindex = maxint(masiv[MAX],i);
на это
C++
1
maxindex = maxint(masiv, i);
Султан
4 / 4 / 1
Регистрация: 11.03.2012
Сообщений: 114
11.03.2012, 16:53  [ТС]     E2034 Cannot convert 'int *' to 'int' #3
Спасибо)Все заработало)
LVV
56 / 56 / 3
Регистрация: 15.02.2010
Сообщений: 239
11.03.2012, 16:59     E2034 Cannot convert 'int *' to 'int' #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;
}
Султан
4 / 4 / 1
Регистрация: 11.03.2012
Сообщений: 114
11.03.2012, 17:30  [ТС]     E2034 Cannot convert 'int *' to 'int' #5
Цитата Сообщение от LVV Посмотреть сообщение
Ну, вот так работает.
Хотя код не очень...
Почему код не очень?
LVV
56 / 56 / 3
Регистрация: 15.02.2010
Сообщений: 239
16.03.2012, 22:12     E2034 Cannot convert 'int *' to 'int' #6
Султан, сформулируйте задачу, которую Вы здесь решили, и я отвечу почему "код не очень..."
Султан
4 / 4 / 1
Регистрация: 11.03.2012
Сообщений: 114
16.03.2012, 22:50  [ТС]     E2034 Cannot convert 'int *' to 'int' #7
Написать программу,которая позволяет пользователю вводить целые числа, а затем сохранять их в массиве типа int.Напишите функцию maxint(), которая, обрабатывает элементы массива один за другим, находит наибольший. Функция должна принимать в качестве аргумента адрес массива и количество элементов в нем, а возвращать индекс наибольшего элемента.Программа должна вызвать эту функцию, а затем вывести наибольший элемент и его индекс.
LVV
56 / 56 / 3
Регистрация: 15.02.2010
Сообщений: 239
17.03.2012, 22:29     E2034 Cannot convert 'int *' to 'int' #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)
Султан
4 / 4 / 1
Регистрация: 11.03.2012
Сообщений: 114
18.03.2012, 00:52  [ТС]     E2034 Cannot convert 'int *' to 'int' #9
Хм.Ну в принципе да...на много лучше моего...

Непонятны только 2 строчки.
C++
1
2
setlocale(0,"");
int *M = new int [n];
интуитивно конечно понятно,но как этим пользоваться...не понятно(
LVV
56 / 56 / 3
Регистрация: 15.02.2010
Сообщений: 239
18.03.2012, 08:18     E2034 Cannot convert 'int *' to 'int' #10
setlocale(0,""); - включение кодировки, для отображения кирилицы в консольном окне.

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

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

то int M[n]; не прокатит, нужно только через new:
Султан
4 / 4 / 1
Регистрация: 11.03.2012
Сообщений: 114
18.03.2012, 14:35  [ТС]     E2034 Cannot convert 'int *' to 'int' #11
Жаль setlocale(0,""); у меня не заработала.Все так же русские символы жутко отображаются.
LVV
56 / 56 / 3
Регистрация: 15.02.2010
Сообщений: 239
19.03.2012, 08:43     E2034 Cannot convert 'int *' to 'int' #12
Между кавычками не должно быть пробела. (ноль запятая кавычки кавычки)
Или попробуйте: setlocale(LC_ALL,"Russian");

А вообще-то вот: [cut]
Султан
4 / 4 / 1
Регистрация: 11.03.2012
Сообщений: 114
19.03.2012, 19:49  [ТС]     E2034 Cannot convert 'int *' to 'int' #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"русский текст";
}
sbnm
0 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 11
09.01.2013, 17:11     E2034 Cannot convert 'int *' to 'int' #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 << "\n\nПовторяющихся элементов нет!";
    else
        cout << "\n\nМаксимальное из встречающихся более одного раза: " << t;
 
}
 
 
int main()
{
 cout << "\n\n1) Выберите способ заполнения матрицы: \n\n    Ввод с клавиатуры, нажмите - 1\n    Заполнение случайными числами, нажмите - 2   ";
 int s; cin >> s;
 
  if((s!=1)&&(s!=2))
  {
    do
      {
        cout << "\nОшибка ввода! Введите еще раз и нажмите ENTER - ";
        cin >> s;                
      }
    while ((s!=1)&&(s!=2));      
  }
 
 cout << "\n2) Введите размер матрицы\n\n";
 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 минут
Программа рабочая, когда все идет сплошным кодом, без выделения отдельной функции, там все правильно. После того как нахождение максимума было выделено в функцию все и остановилось; ошибка где то в передаче матрицы в функцию, вот не могу разобраться.
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
09.01.2013, 17:41     E2034 Cannot convert 'int *' to 'int' #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 должны были быть константами.
sbnm
0 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 11
09.01.2013, 17:45     E2034 Cannot convert 'int *' to 'int' #16
размеры матрицы не должны быть константами.

Добавлено через 2 минуты
Schizorb, спасибо вам ОГРОМНОЕ!!!! )
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
09.01.2013, 17:46     E2034 Cannot convert 'int *' to 'int' #17
sbnm,
C++
1
2
int n, m;
int matr[n][m];
Стандарт языка требует, чтобы n и m были const. То что ваш компилятор такое пропустил, это его проблемы.

Поэтому правильнее все же выделять динамически память, если размеры не известны на этапе компиляции.
sbnm
0 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 11
09.01.2013, 17:49     E2034 Cannot convert 'int *' to 'int' #18
Schizorb, не, че то вы путаете, как раз через указатели решается проблема непостоянного размера массивов, если бы размер был постоянный, все было бы проще.
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
09.01.2013, 17:53     E2034 Cannot convert 'int *' to 'int' #19
Цитата Сообщение от sbnm Посмотреть сообщение
как раз через указатели решается проблема непостоянного размера массивов
Значит вы не так меня поняли.

C++
1
2
3
int size = 10;
int a[size]; // ошибка, т.к. size не константа
int * b = new int[size]; // нет ошибки, память выделяется динамически
http://codepad.org/da6upi6A
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.01.2013, 17:56     E2034 Cannot convert 'int *' to 'int'
Еще ссылки по теме:

int main() и int _tmain(int argc, _TCHAR* argv[]) C++
Ошибка при компиляции error: cannot convert ‘int (*)[5]’ to ‘int**’ for argument ‘1’ to ‘void Replase(int**)' C++
C++ Cannot convert int to int* и обратно

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

Или воспользуйтесь поиском по форуму:
sbnm
0 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 11
09.01.2013, 17:56     E2034 Cannot convert 'int *' to 'int' #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);
}
Yandex
Объявления
09.01.2013, 17:56     E2034 Cannot convert 'int *' to 'int'
Ответ Создать тему
Опции темы

Текущее время: 07:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru