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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.96
Neizer7
0 / 0 / 0
Регистрация: 22.04.2010
Сообщений: 4
#1

Ошибка cannot convert 'float' to 'float*' - C++

22.04.2010, 16:32. Просмотров 3639. Ответов 7
Метки нет (Все метки)

Здравствуйте, что означает error: cannot convert 'float' to 'float*' for argument '1' to 'int mas_time(float*, int)'? Из-за чего она появляется и как можно устранить?

Я пытаюсь использовать значения массива из одной функции в другой.

Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2010, 16:32     Ошибка cannot convert 'float' to 'float*'
Посмотрите здесь:
опять ошибка.на этот раз cannot convert `float (*)(float)' to `float' in argument passing C++
C++ ОШИБКА [Error] cannot convert 'int*' to 'float*' for argument '1' to 'void Syma(float*,int*,int)
cannot convert `float' to `float*. Почему так происходит? C++
C++ Чем отличаются float преобразования (float)var от float(var)
C++ Error C2664: 'sprintf' : cannot convert parameter 2 from 'float' to 'const char *'
invalid types `float[float]' for array subscript C++
неверное приведение void* к *float а далее к float C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Day
1154 / 959 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
22.04.2010, 16:39     Ошибка cannot convert 'float' to 'float*' #2
Функция mas_time требует в качестве 1-го аргумента УКАЗАТЕЛЬ на float, а ты, небось, даешь ей просто float
Надо примерно так
C
1
2
  float x;
  mas_time(&x, ...)
Вообще-то положено выкладывать текст проги или хотя бы его часть, где транслятор увидел ошибку
(он же дает номер строки с ошибкой). А то приходится гадать. Твой случай - простейший, и угадать легко. Это на будущее.
Neizer7
0 / 0 / 0
Регистрация: 22.04.2010
Сообщений: 4
22.04.2010, 16:46  [ТС]     Ошибка cannot convert 'float' to 'float*' #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <math.h>
int  mas_time(float &t,int N)
{
    int i;
    float tn=15,tk=60,dt;
    dt=(tk-tn)/(N-1);
    for(i=0;i<N;i++)
        {t[i]=tn+i*dt;}
    return *t;
}
int mas_Uvh(float *Uvh,int N)
{
    int i;
    float t[i];
    float tn=15,t1=30,a=50,b=0.07,c=0.2;
    for(i=0;i<N;i++)
        {
        if (mas_time(t[i],N)<t1)
Вот кусок программы, что именно нужно изменить? Выдавал ошибку на последней строчке. Исправил, как Вы сказали, теперь пишет main.c++:9: error: invalid types 'float[int]' for array subscript
Day
1154 / 959 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
22.04.2010, 17:14     Ошибка cannot convert 'float' to 'float*' #4
Попробуй сделать так
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <math.h>
int  mas_time(float *t,int N) //
{
    int i;
    float tn=15,tk=60,dt;
    dt=(tk-tn)/(N-1);
    for(i=0;i<N;i++)
        {t[i]=tn+i*dt;}
    return *t;
}
int mas_Uvh(float *Uvh,int N)
{
    int i;
    float t[10];  // Тут недопустима переменная в качестве размера
    float tn=15,t1=30,a=50,b=0.07,c=0.2;
    for(i=0;i<N;i++)
        {
        if (mas_time(&t[i],N)<t1)  //
Измененные строчки отмечены комментариями //
Почитай внимательно про указатели и передачу параметров в функции
Советую на первых порах работать на чистом С без плюсов, пока с этим делом не разберешься.
Твоей проге (во всяком случае этому фрагменту) никаких плюсов не требуется.
А делается это просто - расширение исходного файла д.б. ".C"

Добавлено через 6 минут
Извиняюсь.
Размера массива t мы не знаем (т.е. он динамический, зависит от N)
Делаем так
C
1
2
  float *t;
  t = malloc(N*sizeof(float));
Это все в функции mas_Uvh
Только не забудь t удалить, когда станет не нужна
C
1
 free(t);  // перед выходом из mas_Uvh
Neizer7
0 / 0 / 0
Регистрация: 22.04.2010
Сообщений: 4
22.04.2010, 17:19  [ТС]     Ошибка cannot convert 'float' to 'float*' #5
Размерность t задается в первой функции и используется во второй. Если я укажу во второй функции конкретную цифру, то из первой функции ничего передаваться не будет.
Расширение влияет на работу программы?
Исправил все, кроме задания t конкретной цифры, пишет:
/Applications/NetBeans/NetBeans 6.8.app/Contents/Resources/NetBeans/dlight2/bin/nativeexecution/dorun.sh: line 33: 2016 Segmentation fault sh "${SHFILE}"
Press [Enter] to close the terminal ...

malloc - это функция? Если да, то какую библиотеку подключить? Пишет неизвестный индетификатор на этой строчке.
Day
1154 / 959 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
22.04.2010, 18:13     Ошибка cannot convert 'float' to 'float*' #6
Цитата Сообщение от Neizer7 Посмотреть сообщение
Размерность t задается в первой функции и используется во второй. Если я укажу во второй функции конкретную цифру, то из первой функции ничего передаваться не будет.
В алгоритм работы проги не вникал, да и не мог, да и не хочу.
В любом случае конструкция
C
1
2
  int i;
  float t[i];
абсолютно безграмотна. Ищи другие пути.
Расширение влияет на работу программы?
Влияет на трансляцию. Чистый С не позволяет некоторых заморочек типа "&t" в определении функции
А С++ позволяет, но в САМОМ ДЕЛЕ передается указатель, чтоб в этом разбираться надо не плавать в этих вопросах, а уверенно ходить. Потому-то я порекомендовал тебе ЧИСТЫЙ С. Он на эту штуку сразу скажет "СТОП".
malloc - это функция? Если да, то какую библиотеку подключить? Пишет неизвестный индетификатор на этой строчке.
Так точно, функция.
C
1
#include "alloc.h"
Neizer7
0 / 0 / 0
Регистрация: 22.04.2010
Сообщений: 4
22.04.2010, 18:31  [ТС]     Ошибка cannot convert 'float' to 'float*' #7
После подключение библиотеки все равно пишет неизвестный идентификатор, как можно по-другому обыграть это место?
C++
1
2
int i;
  float t[i];
Уже часа 3 над этим сижу.

Ему почему-то не нравится эта строчка:
C++
1
if (mas_Uvh(&Uvh[i],N)<0) {Uvih[i]=0;}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2010, 20:38     Ошибка cannot convert 'float' to 'float*'
Еще ссылки по теме:
C++ Ошибка преобразования: значение типа "float *" нельзя присвоить сущности типа "float"
C++ Ошибка: redeclaration of `const float PI'
C++ Ошибка. Невозможно преобразовать CString в float
C++ При компилировании выдается ошибка 'float fraction::numerator' is private
C++ Ошибка с циклом While. По разному работает с double и float, хотя должен бы одинаково

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

Или воспользуйтесь поиском по форуму:
dev001
36 / 36 / 3
Регистрация: 13.05.2010
Сообщений: 70
13.05.2010, 20:38     Ошибка cannot convert 'float' to 'float*' #8
Цитата Сообщение от Neizer7 Посмотреть сообщение
int i; float t[i];
ошибка потому как требуется в измеритель массива константное значение
можно вот так написать
C
1
2
#define SIZE_OF_FLOAT_ARR 9
float t[SIZE_OF_FLOAT_ARR];
Добавлено через 10 минут
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <math.h>
int  mas_time(float &t,int N)
{
    int i;
    float tn=15,tk=60,dt;
    dt=(tk-tn)/(N-1);
    for(i=0;i<N;i++)
        {t[i]=tn+i*dt;}
    return *t;
}
int mas_Uvh(float *Uvh,int N)
{
    int i;
    float t[i];
    float tn=15,t1=30,a=50,b=0.07,c=0.2;
    for(i=0;i<N;i++)
        {
        if (mas_time(t[i],N)<t1)
C
1
int  mas_time(float &t,int N) // C - естесна будет ругатцо потому как указатели в C в параметрах функции должны быть `*` а не `&`
если тебе нужен массив float то сделай проще
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
#include <stdio.h>
#include <math.h>
#include <stdlib.h> /* это для malloc,calloc,free,realloc имногих других ф-й*/
int  mas_time(float *t,int N)
{
    int i;
    float tn=15,tk=60,dt;
    dt=(tk-tn)/(N-1);
    for(i=0;i<N;i++)
        {t[i]=tn+i*dt;}
    return *t; /* ужость ты так нормально к типу int не приведешь напиши вот так например:
      return (int)((unsigned long)(*(double *)t)); или return (int)((unsigned long)(double)t[0]);
*/
}
int mas_Uvh(float *Uvh,int N)
{
    int i;
    float *t;
    float tn=15,t1=30,a=50,b=0.07,c=0.2;
    
    t = calloc(sizeof(float), N); /* напиши по себя я использовал calloc чтобы обнулить участок памяти выделенный функцией, т.е t[0] - будет равен 0.0, соотвественно чтобы разместить в t[0] число float нужно умножить размер типа на количество элементов т.е в памяти будет содеражтся число (float) размер которого 4 байта (00 00 00 00) */
    for(i=0;i<N;i++)
        {
        if (mas_time(t[i],N)<t1) /* тут тоже косяк посмотри в декларации функции у тебя float *t, а передаешь ты ему тип float сделай так (по ссцылке :)) mas_time(&t[i], N) */
Yandex
Объявления
13.05.2010, 20:38     Ошибка cannot convert 'float' to 'float*'
Ответ Создать тему
Опции темы

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