'strtoll' и многие другие "не являются членами" std "" - PullRequest
0 голосов
/ 24 мая 2019

strtoull, strtof, strtold, vsnprintf, wcstoll, wcstoull, wcstof и wcstold не являются членами 'std.'Проблема в том, что я не использую ни одну из этих функций.Я даже не знал, что они существуют.они находятся в файле basic_string.h, который я также не знал, что использовал.Я использую VS2015, поэтому я предполагаю, что я компилирую с помощью компилятора VSC ++ 14.0.

Я вижу, что существует более десятка похожих вопросов, но я могу найти только две распространенные ошибки: не использовать флаг C ++ 11 и не #include ing.У меня установлен флаг C ++ 11 и #include <algorithm> ничего не меняет. этот вопрос вызывает у меня любопытство.Я думал, что порядок #include не имеет значения.Я пытался использовать системные библиотеки <> первой и сторонних библиотек второй "", а также наоборот и не заметил никакой разницы.

Я также попытался #include "stdafx.h", как указали некоторые другие ответы, но такого файла не существует.

не уверен, что сюда включить, потому что я наконец-то дошел до того, что в среде IDE не обнаружены ошибки вмой кодопять же, все проблемы в "basic_string.h."вот мои include s:

#include <iostrream>
#include <string>
#include <cstring>
#include <sstream>
#include <map>

#include "curl/curl.h"
#include "curl/easy.h"

это может быть продолжение моего другого вопроса здесь , который я сейчас обновлю.

edit 1: Iвключили <cstdlib>, <cstdio> и <cwchar>, и я не вижу разницы.Мне любопытно, почему возникают проблемы с функциями, которые я никогда не использовал в файлах, которых никогда не касался.

Я полностью забыл, что вчера проводил ремонт VS2015 и вот результаты .Я не уверен, если это дополнительные модули или основные проблемы или что.«Windows Software Development Kit» звучит важно, но я не разрабатываю для Windows-машины (хотя я разрабатываю для Win7).

edit 2: кто-то попросил минимальный воспроизводимый код.Вот весь файл без комментариев:

#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <sstream>
#include <map>
#include <cstdio>
#include <cwchar>

int main(int argc, char *argv[])
{
return 0;
}

только что понял, что мне не нужны все включения для ничего (потому что я закомментировал весь функциональный код), так что теперь я буду видеть, какой из них вызывает проблему.

edit 3: cstring, cstdlib, cstdio, cwchar, и два заголовка curl являются единственными заголовками, которые не вызывают эту проблему.Я могу включить все шесть из них одновременно без проблем.любой другой #include, который был упомянут в OP или предыдущем редактировании, вызовет ту же ошибку ...is not a member of 'std'.Однако я не думаю, что у меня были какие-либо из включенных <c...> до того, как у меня появилась эта проблема. iostream,string,sstream,map каждая (даже по отдельности) вызывает эту проблему.мы все еще смотрим на полную переустановку VS2015?

edit 4: Как предложил один пользователь, я попытался создать новый проект, но это то, что произошло .Я действительно надеялся, что мы не дойдем до этого момента, потому что я не уверен, насколько вы все сможете помочь.По сути, у нас есть сложные настройки сборки, которые я не понимаю.Другой парень, который работает здесь, также не понимает установки.Единственный человек, который знает, находится в отпуске для отцов.Я занимаюсь разработкой на одной машине и сборкой / отладкой на сервере.Тем не менее, я искал настройки и увидел другую диаграмму с вторым сервером в миксе, и я не уверен, как это повлияет на него.После этого он развертывается на другой машине.В любом случае я выбрал те же параметры, что и в текущем проекте, но не могу даже создать пустой.Я не уверен, что этот сбой произошел из-за этой сложной системы или потому что мой VS2015 испорчен.В любом случае, я не могу исправить это как есть, поэтому я думаю, что буду работать над исправлением VS2015 (который уже имел проблемы когда-то), отслеживая этот поток, чтобы увидеть, обнаружит ли эта новая ошибка проекта что-то важное.Большое спасибо всем, кто помогал до сих пор

edit 5: У меня выходной на следующей неделе.Я не смогу давать какие-либо обновления до 3-го числа для тех, кто все еще заботится.Я собираюсь отремонтировать, а затем переустановить

Ответы [ 3 ]

1 голос
/ 24 мая 2019

Этими функциями являются в пространстве имен std, если вы включили правильные стандартные заголовки, которые <cstdlib>, <cstdio> и <cwchar>. "basic_string.h" - это не стандартный заголовок; это, вероятно, какой-то специфичный для реализации заголовок. "stdafx.h" - это то, что Visual Studio использует для предварительно скомпилированных заголовков (это также не входит в стандарт) и порядок, в котором вы включаете заголовки может иметь значение, хотя обычно это не должно.

0 голосов
/ 04 июня 2019

это была проблема с моим Include directories в Свойствах VisualGDB -> Настройки Makefile.Я добавлял новый каталог для каждой библиотеки, которую я получил.Я переустановил VS2015, но это ничего не дало, потому что виновником был вариант проекта.Я скопировал каталоги * include по умолчанию, вот и все.

* кто-то из моей команды предоставил мне список стандартных каталогов включения

0 голосов
/ 24 мая 2019

Я вижу, что есть более десятка похожих вопросов, но я могу только найти ... не # включая

Это, похоже, проблема.

В порядкечтобы использовать стандартные функции, должен быть включен заголовок, который объявляет эти функции.Перечисленные функции не могут быть использованы, потому что соответствующие заголовки не были включены.

Например, strtoull объявлено в <cstdlib>, который не был включен в ваш список включенных включений.

Проблема в том, что я не использую ни одну из этих функций.Я даже не знал, что они существуют.они находятся в файле basic_string.h

Если ошибка указывает на то, что basic_string.h использует эти функции, и это список заголовков, который включает basic_string.h, то basic_string.h содержит ошибки.

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

Вы либо используете basic_string.h, либо используете заголовок, который в trurn использует basic_string.h.Сообщение об ошибке должно сообщать вам, как происходит включение.

У меня есть ... #include <algorithm>

Включая <algorithm> позволяет использовать объявления из этого заголовка,Он не позволяет использовать объявления из других заголовков.


Я также попытался #include "stdafx.h", как указано в некоторых других ответах, но такого файла не существует.

Если ваш проект настроен на использование предварительно скомпилированного "stdafx.h", то вы должны включить его.Если он не настроен на его использование, вы не должны включать его.Предварительно скомпилированные заголовки должны быть включены прежде всего в ваш файл.

...