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

error C2664: невозможно преобразовать параметр - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.80
ejk
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 80
25.05.2012, 21:02     error C2664: невозможно преобразовать параметр #1
Здравствуйте. Отправьте меня если что в другую тему, где это обсуждалось, но я не понимаю, в чем собственно дело

C
1
2
3
4
5
6
7
void grouping(int n, int m, int m1, int* num, float* mas, float** pt)
 
...
for(int i=0;i<N;i++){
        for(int j=0;j<3;j++)
        fscanf(file,"%d",&pt[i][j]);
    }
ругается, что error C2664: grouping: невозможно преобразовать параметр 6 из 'float [100][3]' в 'float **'
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2012, 21:02     error C2664: невозможно преобразовать параметр
Посмотрите здесь:

C++ error C2664:невозможно преобразовать параметр
C++ error C2664: InputMatrixCurrent: невозможно преобразовать параметр 1 из 'int [5][5]' в 'int'
error C2664:невозможно преобразовать параметр C++
error C2664: Display: невозможно преобразовать параметр 1 из 'int [5]' в 'int" C++
C++ невозможно преобразовать параметр
C++ error C2664: itoa: невозможно преобразовать параметр 1 из 'int *' в 'int' + запись в файл
error C2664: CWnd::MessageBoxW: невозможно преобразовать параметр 2 из "long" в "LPCTSTR" C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
5664 / 3143 / 356
Регистрация: 29.11.2010
Сообщений: 8,417
25.05.2012, 21:04     error C2664: невозможно преобразовать параметр #2
задавай массив float [100][3] как динамический
ejk
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 80
25.05.2012, 21:10  [ТС]     error C2664: невозможно преобразовать параметр #3
Не вариант, получается не совсем так, как хочется. Здесь можно что нибудь исправить?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
5664 / 3143 / 356
Регистрация: 29.11.2010
Сообщений: 8,417
25.05.2012, 21:14     error C2664: невозможно преобразовать параметр #4
Цитата Сообщение от ejk Посмотреть сообщение
Не вариант, получается не совсем так, как хочется. Здесь можно что нибудь исправить?
можно размеры массива забить в #define.
А так у вас компилятор будет рассматривать двумерный массив как указатель на указатель.
ejk
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 80
25.05.2012, 21:23  [ТС]     error C2664: невозможно преобразовать параметр #5
У меня итак размер забит в define
Вот полный код

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
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define Nmax 100
 
void grouping(int n, int m, int m1, int* num, float* mas, float** pt)//num -- массив номеров точек, которые уже вошли в комбинацию, m1 -- их количество
{
    int tmp=0;
    if(m1==0)
    {
        for(int i=0; i<n-m+1; i++)
        {
            num[0]=i;
            grouping(n,m,1,num,mas,pt);
        }
    }
    else if(m==m1)
    {
        float x1=0,x2=0,y1=0,y2=0,z1=0,z2=0,mas1=0,mas2=0;
        for(int i=0; i<n; i++)
        {
            for(int j=0;j<3;j++){
            for(int k=0; k<m1; k++)//Здесь ищем число i в массиве num
            {
                tmp = num[k];
                if(i==tmp)//Если нашли
                {
                    
                    x1+=mas[i]*pt[i][j];
                    y1+=mas[i]*pt[i][j];
                    z1+=mas[i]*pt[i][j];
                    mas1+=mas[i];
                }               
                else
                {
                    x2+=mas[i]*pt[i][j];
                    y2+=mas[i]*pt[i][j];
                    z2+=mas[i]*pt[i][j];
                    mas2+=mas[i];
                }
            }
        }
        }
        x1/=mas1;
        x2/=mas2;
        y1/=mas1;
        y2/=mas2;
        z1/=mas1;
        z2/=mas2;
        printf("%f %f %f", x1,y1,z1);
        printf("\n");
        printf("%f %f %f", x2,y2,z2);
        printf("\n");
    }
    else
    {
        int last=num[m1-1];//У нас частицы упорядочены, и если у нас уже была комбинация из 1,3,4 частицы, например, то комбинация из 1,4,3 нас уже не интересует, потому новые частицы имеет смысл присоейдинять к комбинации только начиная с num[m1-1]
        for(int i=last+1; i<n-m+m1+1; i++)//Если номер будет больше, чем n-m+m1+1, то опять-таки комбинации будут повторяться
        {
            num[m1]=i;
            grouping(n,m,m1+1,num,mas,pt);
        }
    }
    
}
 
 
//=======================MAIN===============
int main()
{
    float pt[Nmax][3];
    float mas[Nmax];
    int N=0;//Количество точек
    FILE* f=fopen("tochki.txt","r");
    fscanf(f,"%d",&N);
    fclose(f);
    FILE* file=fopen("3tochki.txt","r");
    for(int i=0;i<N;i++){
        for(int j=0;j<3;j++)
        fscanf(file,"%d",&pt[i][j]);
    }
    fclose(file);
    FILE* fil=fopen("3massa.txt","r");
    for(int i=0; i<N; i++)
        fscanf(fil,"%f",&mas[i]);
    fclose(fil);
    //int n1=(N+1)/2;
    for(int i=0; i<N; i++)
    {
        int* num=new int[i];
        grouping(N,i,0,num,mas,pt);
    }
}
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
25.05.2012, 21:38     error C2664: невозможно преобразовать параметр #6
C++
1
void grouping(int n, int m, int m1, int* num, float* mas, float pt[Nmax][3])
вторую размерность тоже в define можно поставить
ejk
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 80
25.05.2012, 21:47  [ТС]     error C2664: невозможно преобразовать параметр #7
Цитата Сообщение от antoha398 Посмотреть сообщение
вторую размерность тоже в define можно поставить
а нужно?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
5664 / 3143 / 356
Регистрация: 29.11.2010
Сообщений: 8,417
25.05.2012, 21:54     error C2664: невозможно преобразовать параметр #8
Цитата Сообщение от ejk Посмотреть сообщение
а нужно?
Иначе она обидется.
Непонятно, почему вы так её недолюбливайте?
Для первой вам же удобно оперировать с дефайном, почему для второй так нельзя?
ejk
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 80
25.05.2012, 22:07  [ТС]     error C2664: невозможно преобразовать параметр #9
Цитата Сообщение от MrGluck Посмотреть сообщение
почему для второй так нельзя?
Потому что вторая по умолчанию будет 3, так координаты точки в трехмерном пространстве. И даже если поставить его весь в дефайн, то все равно ругается
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
5664 / 3143 / 356
Регистрация: 29.11.2010
Сообщений: 8,417
25.05.2012, 22:11     error C2664: невозможно преобразовать параметр #10
C++
1
2
3
4
5
6
7
8
9
10
11
#define N 100
#define M 3
 
void f(int a[M][N]){}
 
int main()
{
    int a[M][N];
    f(a); 
    return 0;
}
ejk
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 80
25.05.2012, 22:12  [ТС]     error C2664: невозможно преобразовать параметр #11
Цитата Сообщение от MrGluck Посмотреть сообщение
new int*[M];
Ну это же опять динамический. Без него тут никак?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
5664 / 3143 / 356
Регистрация: 29.11.2010
Сообщений: 8,417
25.05.2012, 22:13     error C2664: невозможно преобразовать параметр #12
Цитата Сообщение от ejk Посмотреть сообщение
Ну это же опять динамический. Без него тут никак?
я потом переделал
ejk
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 80
25.05.2012, 22:16  [ТС]     error C2664: невозможно преобразовать параметр #13
Все равно ругается
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
5664 / 3143 / 356
Регистрация: 29.11.2010
Сообщений: 8,417
25.05.2012, 23:20     error C2664: невозможно преобразовать параметр #14
Цитата Сообщение от ejk Посмотреть сообщение
Все равно ругается
Так ты код покажи и ошибку.
ejk
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 80
26.05.2012, 05:26  [ТС]     error C2664: невозможно преобразовать параметр #15
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
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define Nmax 100
void f(float pt[Nmax][Nmax]){}
void grouping(int n, int m, int m1, int* num, float* mas, float** pt)//num -- массив номеров точек, которые уже вошли в комбинацию, m1 -- их количество
{
    int tmp=0;
    if(m1==0)
    {
        for(int i=0; i<n-m+1; i++)
        {
            num[0]=i;
            grouping(n,m,1,num,mas,pt);
        }
    }
    else if(m==m1)
    {
        float x1=0,x2=0,y1=0,y2=0,z1=0,z2=0,mas1=0,mas2=0;
        for(int i=0; i<n; i++)
        {
            for(int j=0;j<3;j++){
            for(int k=0; k<m1; k++)//Здесь ищем число i в массиве num
            {
                tmp = num[k];
                if(i==tmp)//Если нашли
                {
                    
                    x1+=mas[i]*pt[i][j];
                    y1+=mas[i]*pt[i][j];
                    z1+=mas[i]*pt[i][j];
                    mas1+=mas[i];
                }               
                else
                {
                    x2+=mas[i]*pt[i][j];
                    y2+=mas[i]*pt[i][j];
                    z2+=mas[i]*pt[i][j];
                    mas2+=mas[i];
                }
            }
        }
        }
        x1/=mas1;
        x2/=mas2;
        y1/=mas1;
        y2/=mas2;
        z1/=mas1;
        z2/=mas2;
        printf("%f %f %f", x1,y1,z1);
        printf("\n");
        printf("%f %f %f", x2,y2,z2);
        printf("\n");
    }
    else
    {
        int last=num[m1-1];//У нас частицы упорядочены, и если у нас уже была комбинация из 1,3,4 частицы, например, то комбинация из 1,4,3 нас уже не интересует, потому новые частицы имеет смысл присоейдинять к комбинации только начиная с num[m1-1]
        for(int i=last+1; i<n-m+m1+1; i++)//Если номер будет больше, чем n-m+m1+1, то опять-таки комбинации будут повторяться
        {
            num[m1]=i;
            grouping(n,m,m1+1,num,mas,pt);
        }
    }
    
}
 
 
//=======================MAIN===============
int main()
{
    float pt[Nmax][Nmax];
    f(pt);
    float mas[Nmax];
    int N=0;//Количество точек
    FILE* f=fopen("tochki.txt","r");
    fscanf(f,"%d",&N);
    fclose(f);
    FILE* file=fopen("3tochki.txt","r");
    for(int i=0;i<N;i++){
        for(int j=0;j<3;j++)
        fscanf(file,"%d",&pt[i][j]);
    }
    fclose(file);
    FILE* fil=fopen("3massa.txt","r");
    for(int i=0; i<N; i++)
        fscanf(fil,"%f",&mas[i]);
    fclose(fil);
    //int n1=(N+1)/2;
    for(int i=0; i<N; i++)
    {
        int* num=new int[i];
        grouping(N,i,0,num,mas,pt);
    }
}
error C2664: grouping: невозможно преобразовать параметр 6 из 'float [100][100]' в 'float **'
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
26.05.2012, 09:49     error C2664: невозможно преобразовать параметр #16
Цитата Сообщение от ejk Посмотреть сообщение
void grouping(int n, int m, int m1, int* num, float* mas, float** pt)
а что вы в этой строке поменяли?! как была так и осталась.
ejk
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 80
26.05.2012, 12:42  [ТС]     error C2664: невозможно преобразовать параметр #17
Цитата Сообщение от antoha398 Посмотреть сообщение
как была так и осталась.
А что там нужно поменять?
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
26.05.2012, 16:54     error C2664: невозможно преобразовать параметр #18
я ведь уже писал
error C2664: невозможно преобразовать параметр

в функции grouping вместо float **pt надо поставить float pt[Nmax][3]
ejk
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 80
26.05.2012, 17:02  [ТС]     error C2664: невозможно преобразовать параметр #19
Теперь она запускается/компилируется. Только все равно выдает ошибку и не делает то, что нужно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2012, 17:06     error C2664: невозможно преобразовать параметр
Еще ссылки по теме:

error C2664: strcmp: невозможно преобразовать параметр 1 из "char (*)[20]" в "const char *" C++
C++ Error C2664: RegisterClassW: невозможно преобразовать параметр 1 из "WNDCLASSEX *" в "const WNDCLASSW *"
Error C2664: Client::First: невозможно преобразовать параметр 1 из "std::queue<_Ty>" в "std::queue<_Ty> &" C++
C++ Error C2664: невозможно преобразовать из "wchar_t" в "const wchar_t *"
Исправить ошибку C2664: fcvt: невозможно преобразовать параметр из "int" в "int *" C++

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

Или воспользуйтесь поиском по форуму:
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
26.05.2012, 17:06     error C2664: невозможно преобразовать параметр #20
Цитата Сообщение от ejk Посмотреть сообщение
Только все равно выдает ошибку и не делает то, что нужно
ну это уже другой вопрос

проверь это:
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
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define Nmax 100
//void f(float pt[Nmax][Nmax]){}
void grouping(int n, int m, int m1, int* num, float* mas, float pt[Nmax][3])//num -- массив номеров точек, которые уже вошли в комбинацию, m1 -- их количество
{
    int tmp=0;
    if(m1==0)
    {
        for(int i=0; i<n-m+1; i++)
        {
            num[0]=i;
            grouping(n,m,1,num,mas,pt);
        }
    }
    else if(m==m1)
    {
        float x1=0,x2=0,y1=0,y2=0,z1=0,z2=0,mas1=0,mas2=0;
        for(int i=0; i<n; i++)
        {
            for(int j=0;j<3;j++){
            for(int k=0; k<m1; k++)//Здесь ищем число i в массиве num
            {
                tmp = num[k];
                if(i==tmp)//Если нашли
                {
                    
                    x1+=mas[i]*pt[i][j];
                    y1+=mas[i]*pt[i][j];
                    z1+=mas[i]*pt[i][j];
                    mas1+=mas[i];
                }               
                else
                {
                    x2+=mas[i]*pt[i][j];
                    y2+=mas[i]*pt[i][j];
                    z2+=mas[i]*pt[i][j];
                    mas2+=mas[i];
                }
            }
        }
        }
        x1/=mas1;
        x2/=mas2;
        y1/=mas1;
        y2/=mas2;
        z1/=mas1;
        z2/=mas2;
        printf("%f %f %f", x1,y1,z1);
        printf("\n");
        printf("%f %f %f", x2,y2,z2);
        printf("\n");
    }
    else
    {
        int last=num[m1-1];//У нас частицы упорядочены, и если у нас уже была комбинация из 1,3,4 частицы, например, то комбинация из 1,4,3 нас уже не интересует, потому новые частицы имеет смысл присоейдинять к комбинации только начиная с num[m1-1]
        for(int i=last+1; i<n-m+m1+1; i++)//Если номер будет больше, чем n-m+m1+1, то опять-таки комбинации будут повторяться
        {
            num[m1]=i;
            grouping(n,m,m1+1,num,mas,pt);
        }
    }
    
}
 
 
//=======================MAIN===============
int main()
{
    float pt[Nmax][3];
    //f(pt);
    float mas[Nmax];
    int N=0;//Количество точек
    FILE* f=fopen("tochki.txt","r");
    fscanf(f,"%d",&N);
    fclose(f);
    FILE* file=fopen("3tochki.txt","r");
    for(int i=0;i<N;i++){
        for(int j=0;j<3;j++)
        fscanf(file,"%f",&pt[i][j]);
    }
    fclose(file);
    FILE* fil=fopen("3massa.txt","r");
    for(int i=0; i<N; i++)
        fscanf(fil,"%f",&mas[i]);
    fclose(fil);
    //int n1=(N+1)/2;
    for(int i=0; i<N; i++)
    {
        int* num=new int[i];
        grouping(N,i,0,num,mas,pt);
    }
}
Yandex
Объявления
26.05.2012, 17:06     error C2664: невозможно преобразовать параметр
Ответ Создать тему
Опции темы

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