如何解决VSCode/g++无法识别默认包含文件的问题



我对C++编程非常陌生,几乎没有经验。我的问题是:我想使用字符串,所以我在代码中的include中添加了#include,但VSCode告诉我identifier "string" is undefinedC/C++(20)。我所做的是添加和修改了一个c_cpp_properties.json文件vor VSCode:

{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/usr/include/**"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "gnu17",
"cppStandard": "gnu++14",
"intelliSenseMode": "linux-gcc-x64"
}
],
"version": 4
}

但这并没有解决问题。此外,我已经确保安装了C++,包括g++编译器。在VSCode中,我使用以下C++插件/插件:C/C++和C/C++项目生成器(我并没有真正使用)。这是我代码的相关部分:

#include <iostream>
#include <string>
int main(int argc, char *argv[])
{
string s;
return 0;
}

这是错误日志/调试消息:

g++ -std=c++17 -Wall -Wextra -g -Iinc -c src/main.cpp  -o src/main.o
src/main.cpp: In function ‘int main(int, char**)’:
src/main.cpp:30:2: error: ‘string’ was not declared in this scope
30 |  string s;
|  ^~~~~~
src/main.cpp:30:2: note: suggested alternatives:
In file included from /usr/include/c++/9/iosfwd:39,
from /usr/include/c++/9/ios:38,
from /usr/include/c++/9/ostream:38,
from /usr/include/c++/9/iostream:39,
from src/main.cpp:1:
/usr/include/c++/9/bits/stringfwd.h:79:33: note:   ‘std::string’
79 |   typedef basic_string<char>    string;
|                                 ^~~~~~
In file included from /usr/include/c++/9/bits/locale_classes.h:40,
from /usr/include/c++/9/bits/ios_base.h:41,
from /usr/include/c++/9/ios:42,
from /usr/include/c++/9/ostream:38,
from /usr/include/c++/9/iostream:39,
from src/main.cpp:1:
/usr/include/c++/9/string:67:11: note:   ‘std::pmr::string’
67 |     using string    = basic_string<char>;
|           ^~~~~~

解决方案:将string s;替换为std::string s;

C++字符串是"隐藏的";在CCD_ 4名称空间内。因此编译器无法识别string

您可以包含整个std名称空间:

using namespace std;

对特定字符串执行此操作,而不执行其他操作:

using std::string;

或者在初始化字符串时键入CCD_ 7而不是CCD_。默认情况下,C++标准库在编译器的include路径中,您不需要做任何额外的操作就可以使用它的头。

最新更新