что-то не так со строками. Я использовал их в течение нескольких недель без проблем, но в середине понедельника у меня начались странные проблемы:
[Clang IntelliSense] Error: variable has incomplete type 'std::string'
всякий раз, когда я пытаюсь сделать строку. аналогичные ошибки возникают, когда я пытаюсь wstring
и ostringstream
, но не stringstream
. initializing std::string* s
также отлично работает, но s->append(...)
приводит к "member has access into incomplete type 'std::string'"
все это произошло потому, что Visual Studio (VS) внезапно не смогла найти некоторые #includes
, которые у меня были в течение нескольких недель, включая некоторые стандартные библиотеки (не помню, какие, потому что ...). Я решил это с помощью поиска VS правильных файлов, и он обнаружил некоторые файлы (не уверен, что они такие же, как раньше или отличаются), поэтому у него больше нет проблем с операторами #include
, но теперь у меня есть эта проблема.
Я пользовался <string.h>
штрафом в течение нескольких недель. во время исследования этой проблемы я прочитал, что <string.h>
- неправильный файл для использования, поэтому я попытался #include <string>
, но нет никакой разницы. С тех пор я пробовал <strings.h>
и <cstring>
, но разницы там тоже нет.
Я проверил свои внешние зависимости, и в string.h есть десятки ошибок, которые я считаю странными, потому что это стандартный файл, к которому я не прикасался.
Я использую VS2015, GNU make и вижу Clang IntelliSense, но я также вижу здесь немного g ++, так что я не уверен, какой компилятор на самом деле использует. также с использованием visualGDB 5.3. дайте мне знать, если я что-то забыл.
#include <iostream>
#include <string>
#include <sstream>
int main(int argc, char *argv[])
{
std::string message = "uncomment";
...
message
- это часть, которая выделена как имеющая проблему (неполный тип)
std::wstring wideMessage;
также неполный тип
ожидаемые результаты: никаких проблем, как в последние несколько недель. я был в состоянии объявить, инициализировать, добавить (), что угодно
фактические результаты: не могу скомпилировать / отладить
ошибки: variable has incomplete type 'std::string'
variable has incomplete type 'std::wstring'
no matching constructor for initialization of 'std::ostringstream'
Я вижу много подобных проблем здесь, но все проблемы связаны с предварительным объявлением, и я не вижу, как это связано с этим. У меня нет проблем с классами, структурами или функциями; даже объявление переменной в main () проблематично
edit: на основе этого ответа , вероятно, он использует VC ++ 14.0 в качестве компилятора, но я не знаю, как точно сказать
редактировать 2: сообщение об ошибке:
1> VisualGDB: Sending 45 updated source files to build machine...
1> VisualGDB: Run "make CONFIG=Debug" in directory "/tmp/VisualGDB/c/Users/pthien/VS/Whatever/Whatever" on pthien@buildserver (SSH)
1> /opt/poky/1.8/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-g++ -march=armv7-a -mfloat-abi=hard -mfpu=neon -mtune=cortex-a8 --sysroot=/opt/poky/1.8/sysroots/cortexa8hf-vfp-neon-poky-linux-gnueabi -ggdb -ffunction-sections -O0 -std=c++11 -march=armv7-a -mfloat-abi=hard -mfpu=neon -mtune=cortex-a8 --sysroot=/opt/poky/1.8/sysroots/cortexa8hf-vfp-neon-poky-linux-gnueabi -ggdb -ffunction-sections -O0 -I/opt/poky/1.8/sysroots/cortexa8hf-vfp-neon-poky-linux-gnueabi/usr/include -I/opt/googletest-master/googletest/include -I/opt/boost_1_61_0 -I../../cereal/cereal-1.2.2/cereal-1.2.2/include -I/opt/poky/1.8/sysroots/cortexa8hf-vfp-neon-poky-linux-gnueabi/usr/websocketpp-master -I/opt/poky/1.8/sysroots/cortexa8hf-vfp-neon-poky-linux-gnueabi/usr/include/websocketpp -I/opt/curl-7.54.0 -I/opt/boost_1_61_0/boost -I/opt/poky/1.8/sysroots/cortexa8hf-vfp-neon-poky-linux-gnueabi/usr/include/easywsclient-master -I/opt/poky/1.8/sysroots/cortexa8hf-vfp-neon-poky-linux-gnueabi/usr/include/uWebSockets-master -I/opt/poky/1.8/sysroots/cortexa8hf-vfp-neon-poky-linux-gnueabi/usr/include/c++/4.9.2/experimental -I/opt/boost_1_61_0/boost/tr1/tr1 -I/opt/boost_1_61_0/tools/build/src/engine -I/opt/poky/1.8/sysroots/cortexa8hf-vfp-neon-poky-linux-gnueabi/usr/include/c++/4.9.2 -I/opt/curl-7.54.0/include -I/opt/poky/1.8/sysroots/cortexa8hf-vfp-neon-poky-linux-gnueabi/usr/include/cereal -I/opt/poky/1.8/sysroots/x86_64-pokysdk-linux/usr/lib/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.2/include-fixed -I/opt/boost_1_61_0/boost/compatibility/cpp_c_headers -I"../../../../../Program -IFiles -I(x86)/Microsoft -IVisual -IStudio -I10.0/VC/crt/src" -I"../../../../../Program -IFiles -I(x86)/Microsoft -IVisual -IStudio -I14.0/VC/include" -I/opt/poky/1.8/sysroots/cortexa8hf-vfp-neon-poky-linux-gnueabi/usr/include/c++/4.9.2/arm-poky-linux-gnueabi -DDEBUG -c Whatever.cpp -o Debug/Whatever.o -MD -MF Debug/Whatever.dep
1> C:\Users\pthien\AppData\Local\VisualGDB\RemoteSourceCache\buildserver\0008\include\wchar.h(459,20): note : 'wcstold'
1> extern long double wcstold (const wchar_t *__restrict __nptr,
1> ^
1> Whatever.cpp: In function 'int main(int, char**)':
1>C:\Users\pthien\VS\Whatever\Whatever\Whatever.cpp(138,47): error : 'strlen' was not declared in this scope
1> size_t request_len = strlen(webSocketRequest);
1> ^
1> Makefile:160: recipe for target 'Debug/Whatever.o' failed
1> make: *** [Debug/Whatever.o] Error 1
1> -------------------------------------------------------------
1> Command exited with code 2
1> Executable: make
1> Arguments: CONFIG=Debug
1> Directory: /tmp/VisualGDB/c/Users/pthien/VS/Whatever/Whatever
1>VisualGDB : error : Command-line action failed
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.MakeFile.Targets(37,5): error MSB3073: The command ""C:\Program Files (x86)\Sysprogs\VisualGDB\\VisualGDB.exe" /build "C:\Users\pthien\VS\Whatever\Whatever\Whatever.vcxproj" "/solution:C:\Users\pthien\VS\Whatever\Whatever.sln" "/config:Debug" "/platform:Win32"" exited with code 1.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
это около 10% выходных данных, включая начало и конец. что странно, так это проблема с strlen (). это не подчеркнуто в IDE, поэтому я понятия не имел, что с ним возникла проблема. это имеет смысл, потому что я закомментировал #include
для <string.h>
и <cstring>
и strlen () в одном из них.