我是C ++的新手。我在Windows10的visual-studio-code中编译了我的代码,带有2个类型为string和string_view的变量。字符串变量很好,但是string_view给出了错误。我还启用了configuration.json中的c ++ 17扩展并在vscode中编辑了configuration / ui文件。
这是我的代码:=
#include<iostream>
#include<string_view>
using namespace std;
int main(){
string str="hello";
cout<<str<<endl;
std::string_view sv=" world";
auto result=str+sv.data();
return 0;
}
错误是:=
main.cpp: In function 'int main()':
main.cpp:7:12: error: 'string_view' is not a member of 'std'
std::string_view sv=" world";
^~~~~~~~~~~
main.cpp:7:12: note: 'std::string_view' is only available from C++17 onwards
main.cpp:8:23: error: 'sv' was not declared in this scope
auto result=str+sv.data();
^~
答案 0 :(得分:2)
我在您的代码中未发现任何错误。我编译了您的代码here(在此处复制您的代码,并在编译之前选择语言C ++ 17),它可以正常工作。只需检查您正在运行的编译器是否支持C ++ 17功能即可。因为std :: string_view仅从C ++ 17起可用。 要在Visual Studio check here和Visual Studio代码follow this中启用C ++ 17。
希望这会对您有所帮助。
答案 1 :(得分:2)
我正在使用Visual Studio代码的gcc编译器。在C ++ 17中,gcc进行了一些更改,包括将string_view和string集成在一起。 我认为现在似乎更加复杂了,因为在某些情况下,字符串将隐式转换为string_view。
有关更多详细信息:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0254r2.pdf
答案 2 :(得分:0)
默认情况下,VS将项目设置为x86,但是当您打开时 属性,而是加载x64。我认为VS应该加载相同的 您当前在IDE中使用的设置,但这仅仅是一个 个人意见。
为x86设置C ++ 17标准解决了我的问题。 此解决方案对我有用 https://developercommunity.visualstudio.com/content/problem/1133349/namespace-std-has-no-member-string-view.html
答案 3 :(得分:0)
我通过转到..解决了这个错误 项目 > 属性 ... 选择所有配置... > 配置属性 > C/C++ > 语言 > C++ 语言标准 > ...选择 ISO C++ 17 标准(/std::c++17)enter image description here