Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/70: Рейтинг темы: голосов - 70, средняя оценка - 4.56
4 / 4 / 0
Регистрация: 11.03.2012
Сообщений: 120
1

E2034 Cannot convert 'int *' to 'int'

11.03.2012, 16:46. Показов 13446. Ответов 25
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите разобраться,почему вылазит ошибка

[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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.03.2012, 16:46
Ответы с готовыми решениями:

Ошибка при компиляции error: cannot convert ‘int (*)[5]’ to ‘int**’ for argument ‘1’ to ‘void Replase(int**)'
#include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;iomanip&gt; #include &lt;cstdlib&gt; #define row 5...

Сannot convert ‘int (*)[10]’ to ‘int*’ for argument ‘4’ to ‘int
Все вроде правильно..И в визуале работает а на линуксе(код блок) не работает.. #include &quot;mpi.h&quot;...

ОШИБКА [Error] cannot convert 'int*' to 'float*' for argument '1' to 'void Syma(float*,int*,int)
Какая то проблема с указателями,незнаю,не хочет щитать суму парних чисел в второй...

Cannot convert int to int* и обратно
В общем есть код: //---------------------------------------------------------------------------...

25
Полярный
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
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
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
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 << "\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 минут
Программа рабочая, когда все идет сплошным кодом, без выделения отдельной функции, там все правильно. После того как нахождение максимума было выделено в функцию все и остановилось; ошибка где то в передаче матрицы в функцию, вот не могу разобраться.
0
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
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
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
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
09.01.2013, 17:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.01.2013, 17:56
Помогаю со студенческими работами здесь

Ошибка: cannot convert 'int**' to 'int (*)[10]'
Мне выдаёт ошибку при вызове функции 50 cannot convert 'int**' to 'int (*)' for argument '1' to...

Error LNK2019: unresolved external symbol "public: __thiscall Vector<int>::Vector<int>(int,int,int)" (?0?$Vec
Вот есть заголовочный файл // Заголовочный файл Vector.h #ifndef VECTOR_H #define VECTOR_H ...

cannot convert 'int' to 'int*'
Дорогие форумчане, помогите, пожалуйста. В программе возникает ошибка cannot convert 'int' to...

cannot convert int(*)() to int . .
Доброго времени суток! Пытался создать массив из указателей на функции. typedef int...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru