5 / 5 / 7
Регистрация: 08.10.2010
Сообщений: 228
1

Error C3861: 'stof': identifier not found

07.06.2016, 16:12. Показов 3228. Ответов 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
#include "stdafx.h"
#include <cstdlib>
 
float param; 
 
float StringToFloat(const char *str)
{
    bool err;
    char *pLastChar = NULL;
    param = stof(str, &pLastChar);
    err = (*str == '\0') || (*pLastChar != '\0');
    if (!err)
      return param;
    else
    {
      printf("Argument such as #%s", str, " is not a number\n.");
      return 1;
    }
}
 
int main(int argc, char* argv[])
{
  for (int i = 1; i < argc; i++)
    StringToFloat(argv[i]);
        
  return 0;
}
Компилятор находит ошибку: error C3861: 'stof': identifier not found. Какой заголовок использовать?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.06.2016, 16:12
Ответы с готовыми решениями:

Error C3861: 'convert_close': identifier not found //ошибка
Ребята вы пожалуйста не обращайте внимание на код, обратите только внимание на на одну ошибку. ...

Ошибка C3861 'time': identifier not found
Здравствуйте! Я учусь программировать на C++, пользуюсь Visual Studio 2013. Столкнулся с проблемой:...

Error C3861\error C3861\error C4996: 'strcpy':
Вот листинг программы ... #include&lt;iostream&gt; #include&lt;windows.h&gt; #include&lt;fstream&gt; ...

Identifier not found
Объясните пожалуйста почему компилятор выдаёт эту ошибку,и как лучше избегать таких моментов? ...

15
584 / 387 / 216
Регистрация: 20.01.2013
Сообщений: 1,169
07.06.2016, 16:15 2
Посмотрите тут
0
7167 / 6142 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
07.06.2016, 16:23 3
<string> нужен и не древний компилятор.
0
5 / 5 / 7
Регистрация: 08.10.2010
Сообщений: 228
07.06.2016, 16:32  [ТС] 4
egor2116, Да, я уже смотрел там. Но понял так как написал. Что не правильно, могли бы вы ответить подробнее?
0
7167 / 6142 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
07.06.2016, 16:43 5
stof() для string, а тебе нужен atof().
0
5 / 5 / 7
Регистрация: 08.10.2010
Сообщений: 228
08.06.2016, 14:37  [ТС] 6
Ок, переписал программу так:

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
#include <stdio.h>      
#include "stdafx.h"
#include <stdlib.h>
 
double param; 
 
double StringToDouble(const char *str)
{
    bool err;
    char *pLastChar = NULL;
    param = stod(str, &pLastChar);
    err = (*str == '\0') || (*pLastChar != '\0');
    if (!err)
      return param;
    else
    {
      printf("Argument such as #%s", str, " is not a number\n.");
      return 1;
    }
}
 
int main(int argc, char* argv[])
{
  for (int i = 1; i < argc; i++)
    printf("%d\n", StringToDouble(argv[i]));
        
  return 0;
}
Компилятор всё равно ругается: : error C3861: 'stod': identifier not found.

PS: а может на самом деле это потому что "он" старый? Кто-нибудь, пжл, проверьте код в других средах, я использую VS 2008. Можно ли установить свежий компилятор на VS 2008, не хотелось бы мне переустанавливать ОС(использую Win XP)?
0
7167 / 6142 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
08.06.2016, 14:39 7
Ещё раз мой комментарий прочитай. Внимательно.
0
5 / 5 / 7
Регистрация: 08.10.2010
Сообщений: 228
08.06.2016, 15:45  [ТС] 8
не понял что вы имели ввиду. Я использую stod.
В argv[] содержится string, функция возвращает double.
Какой именно комментарий я должен прочитать снова?
Почему мне нужен atof, а не stof и не stod? Что вы имели ввиду, могли бы подробнее..?

Ой, простите, кажется внезапно понял
0
7167 / 6142 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
08.06.2016, 15:54 9
string - это std::string и у тебя его нет. Древний argv никогда string не был. Так что бери atof() или strtod().
0
5 / 5 / 7
Регистрация: 08.10.2010
Сообщений: 228
08.06.2016, 15:59  [ТС] 10
Хотя, всё равно не помогает:

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
#include "stdafx.h" 
#include <string> 
 
double param; 
 
double StringToDouble(const char *str)
{
    bool err;
    char *pLastChar = NULL;
    param = std::stod(str, &pLastChar);
    err = (*str == '\0') || (*pLastChar != '\0');
    if (!err)
      return param;
    else
    {
      printf("Argument such as #%s", str, " is not a number\n.");
      return 1;
    }
}
 
int main(int argc, char* argv[])
{
  for (int i = 1; i < argc; i++)
    printf("%d\n", StringToDouble(argv[i]));
        
  return 0;
error C2039: 'stod' : is not a member of 'std'
error C3861: 'stod': identifier not found
0
Эксперт С++
4978 / 3085 / 456
Регистрация: 10.11.2010
Сообщений: 11,164
Записей в блоге: 10
08.06.2016, 16:02 11
Дима_Кирсанов, ты глупой, нет?
Цитата Сообщение от nmcf Посмотреть сообщение
бери atof() или strtod()
0
5 / 5 / 7
Регистрация: 08.10.2010
Сообщений: 228
08.06.2016, 16:11  [ТС] 12
Читаю документацию в Интернете:

А параметр argv является указателем на массив указателей на строки.
В этом массиве каждый элемент указывает на какой-либо аргумент командной строки.
Все аргументы командной строки являются строковыми...

Делаю вывод: каждый argv[i] есть элемент типа string;

Читаю дальше:

1) Функция atof преобразует строку в значение типа double.

2) Функция strtod преобразовывает строку string в double.

3) double stod (const string& str, size_t* idx = 0);
str - String object with the representation of a floating-point number.

Делаю вывод: между atof(), strtod() и stod() нет никакой разницы, в плане принимаемой и возвращаемой информации.

PS: Я уже совсем ничего не понимаю...
0
7167 / 6142 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
08.06.2016, 16:16 13
Это каша в голове или какая-то ассоциация с переводом слова string?
У тебя массив char, значит надо использовать функции, о которых я написал.
А stof() для работы с классом string: http://www.cplusplus.com/reference/string/string/
0
5 / 5 / 7
Регистрация: 08.10.2010
Сообщений: 228
08.06.2016, 16:17  [ТС] 14
castaway, зачем брать atof() или strtod(), если я хочу использовать stod(). И между atof(), strtod() и stod() нет никакой разницы, в плане принимаемой и возвращаемой информации. И я уже добавил заголовочный файл: #include <string>
0
7167 / 6142 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
08.06.2016, 16:22 15
Разницу в типе первого параметра не видишь?
C++
1
2
double atof (const char* str);
double stod (const string&  str, size_t* idx = 0);
0
Эксперт С++
4978 / 3085 / 456
Регистрация: 10.11.2010
Сообщений: 11,164
Записей в блоге: 10
08.06.2016, 16:23 16
Цитата Сообщение от Дима_Кирсанов Посмотреть сообщение
castaway, зачем брать atof() или strtod(), если я хочу использовать stod().
Боюсь, даже если я попытаюсь тебе это объяснить то ты всё-равно не поймёшь, т.ч. используй что хочешь.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.06.2016, 16:23
Помогаю со студенческими работами здесь

Error C3861: _T: идентификатор не найден
Код ниже в картинке. Урок NeHe по инициализации окна Windows

Strcpy identifier not found
Не компилируеться, подчеркивает strcpy в чем может быть ошибка? void printHrad(struct hrady...

Ошибка identifier not found
Пытаюсь создать функцию по сортировке, ну и ее выполнение соответственно. Цель - разобраться с...

error C3861: Low: идентификатор не найден
error C3861: Low: идентификатор не найден error C2146: синтаксическая ошибка: отсутствие &quot;;&quot; перед...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru