Error C3861: 'stof': identifier not found

Дима_Кирсанов

#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. Какой заголовок использовать?
14 ответов

Дима_Кирсанов


Дима_Кирсанов

нужен и не древний компилятор.


Дима_Кирсанов

egor2116, Да, я уже смотрел там. Но понял так как написал. Что не правильно, могли бы вы ответить подробнее?


Дима_Кирсанов

stof() для string, а тебе нужен atof().


Дима_Кирсанов

Ок, переписал программу так:
#include <stdio.h>      
#include "stdafx.h"
#include <stdlib.h>
 
****** param; 
 
****** **************(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", **************(argv[i]));
        
  return 0;
}
Компилятор всё равно ругается: : error C3861: 'stod': identifier not found.PS: а может на самом деле это потому что "он" старый? Кто-нибудь, пжл, проверьте код в других средах, я использую VS 2008. Можно ли установить свежий компилятор на VS 2008, не хотелось бы мне переустанавливать ОС(использую Win XP)?


Дима_Кирсанов

Ещё раз мой комментарий прочитай. Внимательно.


Дима_Кирсанов

не понял что вы имели ввиду. Я использую stod. В argv[] содержится string, функция возвращает ******. Какой именно комментарий я должен прочитать снова? Почему мне нужен atof, а не stof и не stod? Что вы имели ввиду, могли бы подробнее..?Ой, простите, кажется внезапно понял


Дима_Кирсанов

string - это std::string и у тебя его нет. Древний argv никогда string не был. Так что бери atof() или strtod().


Дима_Кирсанов

Хотя, всё равно не помогает:
#include "stdafx.h" 
#include <string> 
 
****** param; 
 
****** **************(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", **************(argv[i]));
        
  return 0;
error C2039: 'stod' : is not a member of 'std' error C3861: 'stod': identifier not found


Дима_Кирсанов

Дима_Кирсанов, ты глупой, нет?
бери atof() или strtod()


Дима_Кирсанов

Читаю документацию в Интернете:А параметр argv является указателем на массив указателей на строки. В этом массиве каждый элемент указывает на какой-либо аргумент командной строки. Все аргументы командной строки являются строковыми...Делаю вывод: каждый argv[i] есть элемент типа string;Читаю дальше:1) Функция atof преобразует строку в значение типа ******.2) Функция strtod преобразовывает строку string в ******.3) ****** stod (const string& str, size_t* idx = 0); str - String object with the representation of a floating-point number.Делаю вывод: между atof(), strtod() и stod() нет никакой разницы, в плане принимаемой и возвращаемой информации. PS: Я уже совсем ничего не понимаю...


Дима_Кирсанов

Это каша в голове или какая-то ассоциация с переводом слова string? У тебя массив char, значит надо использовать функции, о которых я написал. А stof() для работы с классом string: http://www.cplusplus.com/reference/string/string/


Дима_Кирсанов

castaway, зачем брать atof() или strtod(), если я хочу использовать stod(). И между atof(), strtod() и stod() нет никакой разницы, в плане принимаемой и возвращаемой информации. И я уже добавил заголовочный файл: #include


Дима_Кирсанов

Разницу в типе первого параметра не видишь?
****** atof (const char* str);
****** stod (const string&  str, size_t* idx = 0);