我正在尝试教自己一些C ++ 17。
为什么编译器为以下代码段引发错误?
#include <iostream>
#include <vector>
#include <iterator>
int main()
{
std::vector<int> v = { 3, 1, 4 };
std::cout << std::size(v) << '\n';
int a[] = { -5, 10, 15 };
std::cout << std::size(a) << '\n';
}
编译器抛出以下错误
manish@Manish-Tummala:~/c_files$ g++ 6.cpp -o - 6.out
6.cpp: In function ‘int main()’:
6.cpp:8:23: error: ‘size’ is not a member of ‘std’
std::cout << std::size(v) << '\n';
^~~~
6.cpp:8:23: note: suggested alternative: ‘size_t’
std::cout << std::size(v) << '\n';
^~~~
size_t
6.cpp:11:23: error: ‘size’ is not a member of ‘std’
std::cout << std::size(a) << '\n';
^~~~
6.cpp:11:23: note: suggested alternative: ‘size_t’
std::cout << std::size(a) << '\n';
^~~~
size_t
答案 0 :(得分:3)
有关GCC中的C ++ 17支持,请参阅:
暂时,默认情况下未启用C ++ 17支持:
要启用C ++ 17支持,请将命令行参数
-std=c++17
添加到g++
命令行中。或者,要启用除C ++ 17功能之外的GNU扩展,请添加-std=gnu++17
。
目前,用于GCC的C ++ 17 ABI尚未完成。这意味着今天以C ++ 17模式构建的程序可能无法链接到同样以C ++ 17模式编译的过去或将来的二进制文件(或在运行时崩溃)。稳定的ABI可确保跨编译器版本实现这种互操作性。
一旦ABI完成,默认版本的GCC将默认启用C ++ 17模式。
答案 1 :(得分:0)
您的g ++安装版本必须为6或更高版本。您可以使用
进行检查<InvokeNextExceptionFilterAsync>
如果您的g ++版本足够高。您还必须使用c ++ 17命令行选项执行它。
getPages() {
this.pagesService.getPages(this.projectId).subscribe((data: any ) => {
this.pages = data.result ;
let _pages = this.pages.map(page => new PageModel(page.id, page.name,
page.url, page.elements) );
this.pages = _pages;
console.log('pages');
console.log( this.pages);
});
或
g++ -v
答案 2 :(得分:0)
对于VSCode:添加对C ++ 17的显式引用将有所帮助,这可以通过修改文件夹中的 tasks.json 文件
完成。 "args": [
"-std=c++17",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
]