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

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

Войти
Регистрация
Восстановить пароль
 
 
takewa
10 / 7 / 1
Регистрация: 15.08.2010
Сообщений: 372
#1

cannot convert parametr - C++

31.10.2012, 22:43. Просмотров 819. Ответов 18
Метки нет (Все метки)

Здравствуйте, у меня проблемка, программа ругается не пойму на что. Если можете исправьте пожалуйста.
C:\Users\DniweEbanoe\Desktop\pepiska\7_3\7_3.cpp(71) : error C2664: 'sum' : cannot convert parameter 1 from 'int [10][10]' to 'int ** '
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
C:\Users\DniweEbanoe\Desktop\pepiska\7_3\7_3.cpp(72) : error C2664: 'sgl' : cannot convert parameter 1 from 'int [10][10]' to 'int ** '
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
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
#include<iostream>
#include <iomanip.h> 
void sgl(int **matrs,int **matr, int n)
{int i;int j;int kol_vo;int k;int l;
for (i=0;i<n;i++)
        for (j=0;j<n;j++)
            {   matrs[i][j]=0;
                kol_vo=0;
                for (k=i-1;k<=i+1;k++)
                    {
                      if ((k>-1)&(k<n))
                        { 
                            for (l=j-1;l<=j+1;l++)
                            { if ((l>-1)&(l<n))
                                { 
                                    if ((k!=i)|(l!=j))
                                    { 
                                matrs[i][j]=matrs[i][j]+matr[k][l];
                                kol_vo++;
                                    }
                                }
                            }
                        }
                    }
                matrs[i][j]=matrs[i][j]/kol_vo;
            }
    cout<<"Iz nee poluchena sglajenaya matrica:"<<endl; 
}
void sum(int **matrs,int n)
{int i;int j;for (i=0;i<n;i++)
    {
        for (j=0;j<n;j++)
            { 
            cout<<setw(2)<< setprecision (3) <<matrs[i][j]<<'\t';
            }
        cout<<endl;
    }
       int sum=0;int p;
    for (i=1;i<n;i++)
        for (j=0;j<n-(n-i);j++)
        { if ((matrs[i][j])<0)
            {
            p=matrs[i][j];
            matrs[i][j]=matrs[i][j]*(-1);
            sum+=matrs[i][j];
            matrs[i][j]=p;
            }
          else
            {
              sum+=matrs[i][j];
            }
        }
            
        cout<<"summa modulei elementov nije glavnoi diagonali sglajhenoy matrici : "<<setw(8)<<sum<<endl;
            
}
 
void main()
{
    const int n= 10; 
    int matr [n][n];
    int matrs[n][n]; 
    int i,j,k,l;
    for (i=0;i<n;i++)
        for (j=0;j<n;j++) 
        {
        
            cout << setw(4) << (matr[i][j] = rand() % 5-4)<<'\t';
        }
   cout<<endl; 
    sum(matr,n);
    sgl(matrs,n,matr);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2012, 22:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос cannot convert parametr (C++):

Type mismatch in parametr - C++
int result(int mas,int n) { int i; for (i=0;i&lt;n;i++) { if(mas==0) { printf(&quot;Do finisha dobralos %d...

convert - C++
как преобразовать uintmax_t в string либо char*

Cannot convert - C++
Прошу прощения за столь ламерский вопрос. При попытке запустить прогу вылетает сообщение: Вот код: #include &lt;iostream.h&gt; ...

cannot convert parameter 1 from - C++
Доброй ночи, вот написал програмку, не пойму почему ругается? Если не ошибаюсь нужно выделить память под массив? Но как это правильно...

Error: cannot convert - C++
Добрый вечер. Ошибки: main.cpp:17:39: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 ...

Cd key convert - C++
Здраствуйте, есть некая программа, установщик который при запуске запрашивает ключ установки вот такого вида: ...

18
angelgreys
9 / 9 / 0
Регистрация: 29.10.2012
Сообщений: 27
31.10.2012, 22:48 #2
а что делает программа?
я, конечно, понимаю, что приведен исходник, но...

по ошибкам:
ты передаешь в функцию матрицу, а нужно передать указатель

C++
1
2
sum(matr,n);
sgl(matrs,n,matr);
замени на
C++
1
2
sum(**matr,n);
sgl(**matrs,n,matr);
поидее должно заработать))
1
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
31.10.2012, 22:50 #3
Цитата Сообщение от takewa Посмотреть сообщение
ругается не пойму на что.
Ругается на несоответствие типов: массив и указатель - это разные типы.
Можете попробывать заменить
C++
1
void sgl(int **matrs,int **matr, int n)
на
C++
1
2
template<int n>
void sgl(int (&matrs)[n][n], int (&matr)[n][n])
а
C++
1
void sum(int **matrs,int n)
на
C++
1
2
template<int n>
void sum(int (&matrs)[n][n])
Соответственно вызывать их так
C++
1
2
sum(matr);
sgl(matrs, matr);
1
David Sylva
1287 / 949 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
31.10.2012, 22:52 #4
Неправильно передаёшь матрицы в функции, в твоём случае надо вместо void sum(int **matrs,int n), сделать так void sum(int matrs[][10], int n); С другой функцией то же самое.
1
takewa
10 / 7 / 1
Регистрация: 15.08.2010
Сообщений: 372
31.10.2012, 22:57  [ТС] #5
Цитата Сообщение от gray_fox Посмотреть сообщение
Ругается на несоответствие типов: массив и указатель - это разные типы.
Можете попробывать заменить
C++
1
void sgl(int **matrs,int **matr, int n)
на
C++
1
2
template<int n>
void sgl(int (&matrs)[n][n], int (&matr)[n][n])
а
C++
1
void sum(int **matrs,int n)
на
C++
1
2
template<int n>
void sum(int (&matrs)[n][n])
Соответственно вызывать их так
C++
1
2
sum(matr);
sgl(matrs, matr);
это уже другая лаба будет, она то у меня работает на ура.

Добавлено через 1 минуту
Цитата Сообщение от angelgreys Посмотреть сообщение
а что делает программа?
я, конечно, понимаю, что приведен исходник, но...

по ошибкам:
ты передаешь в функцию матрицу, а нужно передать указатель

C++
1
2
sum(matr,n);
sgl(matrs,n,matr);
замени на
C++
1
2
sum(**matr,n);
sgl(**matrs,n,matr);
поидее должно заработать))
не помогло

Добавлено через 59 секунд
Цитата Сообщение от David Sylva Посмотреть сообщение
Неправильно передаёшь матрицы в функции, в твоём случае надо вместо void sum(int **matrs,int n), сделать так void sum(int matrs[][10], int n); С другой функцией то же самое.
та же ошибка
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
31.10.2012, 22:57 #6
Тогда можно попробывать вызывать так:
C++
1
2
int * p = &matr[0][0];
sum(&p, n);
Но я вообще не уверен, что это корректно.
1
takewa
10 / 7 / 1
Регистрация: 15.08.2010
Сообщений: 372
31.10.2012, 23:21  [ТС] #7
Цитата Сообщение от angelgreys Посмотреть сообщение
а что делает программа?
я, конечно, понимаю, что приведен исходник, но...
Соседями элемента Aij в матрице назовём элементы Akl с i-1<k<i+1 , j-1<l <j+1 , (k,l) неравно (i,j) . Операция сглаживания матрицы даёт новую матрицу того же размера, каждый элемент которой получается как среднее арифметической имеющихся соседей соответствующего элемента исходной матрицы. Построить резулbтат сглаживания заданной вещественной матрицы размером 10 на 10.
В сглаженной матрице найти сумму модулей элементов, расположенных ниже главной диагонали.
Задание

Добавлено через 1 минуту
Цитата Сообщение от gray_fox Посмотреть сообщение
Тогда можно попробывать вызывать так:
C++
1
2
int * p = &matr[0][0];
sum(&p, n);
Но я вообще не уверен, что это корректно.
и куда писать int * p = &matr[0][0];?

Добавлено через 2 минуты
Программа заработала, я просто сразу 2 способа впислал, и не заметил. Помогло void sum(int matrs[][10], int n);
Но вот беда.
Соседями элемента Aij в матрице назовём элементы Akl с i-1<k<i+1 , j-1<l <j+1 , (k,l) неравно (i,j) . Операция сглаживания матрицы даёт новую матрицу того же размера, каждый элемент которой получается как среднее арифметической имеющихся соседей соответствующего элемента исходной матрицы. Построить резулbтат сглаживания заданной вещественной матрицы размером 10 на 10.
Это условие не работает..
Она тупо ничего не делает...

Добавлено через 17 минут
Может кто то помочь исправить код?
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
01.11.2012, 00:10 #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
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
   matrs[0][0] = (
              matr[  0  ][  1  ]
            + matr[  1  ][  0  ]
            + matr[  1  ][  1  ]
         ) / 3;
   matrs[0][n - 1] = (
              matr[  0  ][n - 2]
            + matr[  1  ][n - 1]
            + matr[  1  ][n - 2]
         ) / 3;
   matrs[n - 1][0] = (
              matr[n - 2][  0  ]
            + matr[n - 1][  1  ]
            + matr[n - 2][  1  ]
         ) / 3;
   matrs[n - 1][n - 1] = (
              matr[n - 2][n - 1]
            + matr[n - 1][n - 2]
            + matr[n - 2][n - 2]
         ) /3;
   
   for (std::size_t i = 1; i + 1 != n; ++i) {
      matrs[0][i] = (
                 matr[  0  ][i - 1]
               + matr[  0  ][i + 1]
               + matr[  1  ][  i  ]
               + matr[  1  ][i - 1]
               + matr[  1  ][i + 1]
            ) / 5;
      matrs[n - 1][i] = (
                 matr[n - 1][i - 1]
               + matr[n - 1][i + 1]
               + matr[n - 2][  i  ]
               + matr[n - 2][i - 1]
               + matr[n - 2][i + 1]
            ) / 5;
      matrs[i][0] = (
                 matr[i - 1][  0  ]
               + matr[i + 1][  0  ]
               + matr[  i  ][  1  ]
               + matr[i - 1][  1  ]
               + matr[i + 1][  1  ]
            ) / 5;
      matrs[i][n - 1] = (
                 matr[i - 1][n - 1]
               + matr[i + 1][n - 1]
               + matr[  i  ][n - 2]
               + matr[i - 1][n - 2]
               + matr[i + 1][n - 2]
            ) / 5;
      
      for (std::size_t j = 1; j + 1 != n; ++j) {
         matrs[i][j] = (
                    matr[i - 1][  j  ]
                  + matr[i - 1][j - 1]
                  + matr[i - 1][j + 1]
                  + matr[  i  ][j - 1]
                  + matr[  i  ][j + 1]
                  + matr[i + 1][  j  ]
                  + matr[i + 1][j - 1]
                  + matr[i + 1][j + 1]
               ) / 8;
      }
   }
Добавлено через 50 секунд
Проверял так: http://liveworkspace.org/code/6d85b8ef6337d20c3b2fb66a34639dcf
1
takewa
10 / 7 / 1
Регистрация: 15.08.2010
Сообщений: 372
01.11.2012, 00:12  [ТС] #9
Цитата Сообщение от gray_fox Посмотреть сообщение
Вот такой вот ужас получился (тело ф-ии):

Добавлено через 50 секунд
Проверял так: http://liveworkspace.org/code/6d85b8ef6337d20c3b2fb66a34639dcf
это я как понял нужно в void sgl писать?)
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
01.11.2012, 00:16 #10
Цитата Сообщение от takewa Посмотреть сообщение
это я как понял нужно в void sgl писать?)
Ну да.
1
takewa
10 / 7 / 1
Регистрация: 15.08.2010
Сообщений: 372
01.11.2012, 00:26  [ТС] #11
Я то думаю, что не так, смотрю не вписал cout<<matrs, вписал, матрица, изменилась, но это не является ср. ар.

Добавлено через 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
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
#include<iostream>
#include <iomanip.h> 
void sgl(int matrs[][10], int n, int matr[][10])
{int j;matrs[0][0] = (
              matr[  0  ][  1  ]
            + matr[  1  ][  0  ]
            + matr[  1  ][  1  ]
         ) / 3;
   matrs[0][n - 1] = (
              matr[  0  ][n - 2]
            + matr[  1  ][n - 1]
            + matr[  1  ][n - 2]
         ) / 3;
   matrs[n - 1][0] = (
              matr[n - 2][  0  ]
            + matr[n - 1][  1  ]
            + matr[n - 2][  1  ]
         ) / 3;
   matrs[n - 1][n - 1] = (
              matr[n - 2][n - 1]
            + matr[n - 1][n - 2]
            + matr[n - 2][n - 2]
         ) /3;
   
   for (size_t i = 1; i + 1 != n; ++i) {
      matrs[0][i] = (
                 matr[  0  ][i - 1]
               + matr[  0  ][i + 1]
               + matr[  1  ][  i  ]
               + matr[  1  ][i - 1]
               + matr[  1  ][i + 1]
            ) / 5;
      matrs[n - 1][i] = (
                 matr[n - 1][i - 1]
               + matr[n - 1][i + 1]
               + matr[n - 2][  i  ]
               + matr[n - 2][i - 1]
               + matr[n - 2][i + 1]
            ) / 5;
      matrs[i][0] = (
                 matr[i - 1][  0  ]
               + matr[i + 1][  0  ]
               + matr[  i  ][  1  ]
               + matr[i - 1][  1  ]
               + matr[i + 1][  1  ]
            ) / 5;
      matrs[i][n - 1] = (
                 matr[i - 1][n - 1]
               + matr[i + 1][n - 1]
               + matr[  i  ][n - 2]
               + matr[i - 1][n - 2]
               + matr[i + 1][n - 2]
            ) / 5;
      
      for (size_t j = 1; j + 1 != n; ++j) {
         matrs[i][j] = (
                    matr[i - 1][  j  ]
                  + matr[i - 1][j - 1]
                  + matr[i - 1][j + 1]
                  + matr[  i  ][j - 1]
                  + matr[  i  ][j + 1]
                  + matr[i + 1][  j  ]
                  + matr[i + 1][j - 1]
                  + matr[i + 1][j + 1]
               ) / 8;
      }
  
   }for (i=0;i<n;i++)
    {
        for (j=0;j<n;j++)
            { 
            cout<<setw(2)<< setprecision (3) <<matrs[i][j]<<'\t';
            }
        cout<<endl;
    }
}
void sum(int matrs[][10], int n)
{int i;int j;
       int sum=0;int p;
    for (i=1;i<n;i++)
        for (j=0;j<n-(n-i);j++)
        { if ((matrs[i][j])<0)
            {
            p=matrs[i][j];
            matrs[i][j]=matrs[i][j]*(-1);
            sum+=matrs[i][j];
            matrs[i][j]=p;
            }
          else
            {
              sum+=matrs[i][j];
            }
        }
            
        cout<<"summa modulei elementov nije glavnoi diagonali sglajhenoy matrici : "<<setw(8)<<sum<<endl;
            
}
 
void main()
{
    const int n= 10; 
    int matr [n][n];
    int matrs[n][n]; 
    int i,j;
    for (i=0;i<n;i++)
        for (j=0;j<n;j++) 
        {
        
            cout << setw(4) << (matr[i][j] = rand() % 5-4)<<'\t';
        }
   cout<<endl; 
    sum(matr,n);
    sgl(matrs,n,matr);
}
Вот обновленный код, может я чего то не вижу?
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
01.11.2012, 00:26 #12
Во-первых, в задании тип матрицы вещественный, а не 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
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
#include <iostream>
#include <iterator>
#include <algorithm>
 
 
void sgl(double matrs[][4], int n, double matr[][4])
{
matrs[0][0] = (
              matr[  0  ][  1  ]
            + matr[  1  ][  0  ]
            + matr[  1  ][  1  ]
         ) / 3;
   matrs[0][n - 1] = (
              matr[  0  ][n - 2]
            + matr[  1  ][n - 1]
            + matr[  1  ][n - 2]
         ) / 3;
   matrs[n - 1][0] = (
              matr[n - 2][  0  ]
            + matr[n - 1][  1  ]
            + matr[n - 2][  1  ]
         ) / 3;
   matrs[n - 1][n - 1] = (
              matr[n - 2][n - 1]
            + matr[n - 1][n - 2]
            + matr[n - 2][n - 2]
         ) /3;
   
   for (int i = 1; i + 1 != n; ++i) {
      matrs[0][i] = (
                 matr[  0  ][i - 1]
               + matr[  0  ][i + 1]
               + matr[  1  ][  i  ]
               + matr[  1  ][i - 1]
               + matr[  1  ][i + 1]
            ) / 5;
      matrs[n - 1][i] = (
                 matr[n - 1][i - 1]
               + matr[n - 1][i + 1]
               + matr[n - 2][  i  ]
               + matr[n - 2][i - 1]
               + matr[n - 2][i + 1]
            ) / 5;
      matrs[i][0] = (
                 matr[i - 1][  0  ]
               + matr[i + 1][  0  ]
               + matr[  i  ][  1  ]
               + matr[i - 1][  1  ]
               + matr[i + 1][  1  ]
            ) / 5;
      matrs[i][n - 1] = (
                 matr[i - 1][n - 1]
               + matr[i + 1][n - 1]
               + matr[  i  ][n - 2]
               + matr[i - 1][n - 2]
               + matr[i + 1][n - 2]
            ) / 5;
      
      for (int j = 1; j + 1 != n; ++j) {
         matrs[i][j] = (
                    matr[i - 1][  j  ]
                  + matr[i - 1][j - 1]
                  + matr[i - 1][j + 1]
                  + matr[  i  ][j - 1]
                  + matr[  i  ][j + 1]
                  + matr[i + 1][  j  ]
                  + matr[i + 1][j - 1]
                  + matr[i + 1][j + 1]
               ) / 8;
      }
   }
}
 
int main() {
   double matr[4][4] = {
      {1, 2, 3, 1},
      {4, 5, 6, 2},
      {7, 8, 9, 3},
      {4, 5, 6, 7}
   };
   double matrs[4][4];
   
   sgl(matrs, 4, matr);
   
   for (int i = 0; i != 4; ++i) {
      std::copy(&matrs[i][0], &matrs[i][0] + 4, std::ostream_iterator<double>(std::cout << std::fixed, " "));
      std::cout << std::endl;
   }
}
http://liveworkspace.org/code/82b794827ad87949a8c98f05ac55c00d
1
takewa
10 / 7 / 1
Регистрация: 15.08.2010
Сообщений: 372
01.11.2012, 00:29  [ТС] #13
Цитата Сообщение от gray_fox Посмотреть сообщение
Во-первых, в задании тип матрицы double, а не int. Во-вторых, вот так вот, только с размером 4:

http://liveworkspace.org/code/82b794827ad87949a8c98f05ac55c00d
Да я смотрел Ваш код. Там все ок... А вот у меня чето не то

Добавлено через 1 минуту
Хвала небесам, я идиот, других слов нет Честн слово, спасибо ОГРОМНОЕ!!!
0
takewa
10 / 7 / 1
Регистрация: 15.08.2010
Сообщений: 372
07.11.2012, 22:32  [ТС] #14
Я столкнулся с еще 1ой проблемой, программа не считает сумму сглаженной матрицы, а считает сумму введенной. Код, который мне переписали, не понятен, не могу сообразить, как заставить ее считать сумму.
0
takewa
10 / 7 / 1
Регистрация: 15.08.2010
Сообщений: 372
09.11.2012, 19:41  [ТС] #15
ап темку
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.11.2012, 19:41
Привет! Вот еще темы с ответами:

Convert string to char - C++
В структуре надо зарандомить имена. Пробую таким способом: создал массив имен string arrayName = { &quot;Vasya&quot;, &quot;Petya&quot;, &quot;Andrey&quot;,...

Cannot convert 'void' to 'bool' - C++
Всем привет! Уважаемые программисты подскажите пожалуйста, при компиляции ошибка Unit1.cpp(21): E2034 Cannot convert 'void' to 'bool'...

error: cannot convert to in assigment - C++
Помогите найти ошибку. Компилятор выдает - in constructor 'LudziPW::LudziPW(int)' : (115) error: cannot convert 'LudziPW**' to...

Cannot convert 'UnicodeString' to 'String' - C++
Подскажите как конвертировать такие форматы, компилятор если что RAT Studio 2010 нашел тут вариант...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
09.11.2012, 19:41
Ответ Создать тему
Опции темы

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