vscode:命名空间“std”没有成员“barrier”C/C++(135)

问题描述 投票:0回答:1

Ubuntu 22.04.4
VSCode 1.88.1
g++ (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0

VSCode 正在标记

std::barrier
表示名称空间“std”没有成员“屏障”C/C++(135.

#include <iostream>
#include <barrier>
#include <pthread.h>

std::barrier my_barrier(3); 
  
void* my_function(void*) 
{ 
    my_barrier.arrive_and_wait(); 
    return NULL;
} 
  
int main() {

这是我的 c_cpp_properties.json 文件的相关部分:

"includePath": [
    "${workspaceFolder}",
    "${workspaceFolder}/include",
    "/usr/include",
    "/usr/include/c++/11",
    "/usr/include/c++/11/backward",
    "/usr/include/x86_64-linux-gnu",
    "/usr/include/x86_64-linux-gnu/c++/11",
    "/usr/lib/gcc/x86_64-linux-gnu/11/include",
    "/usr/local/include"
],
"defines": [],
"cStandard": "c23",
"intelliSenseMode": "linux-gcc-x64",
"configurationProvider": "ms-vscode.cmake-tools",
"cppStandard": "c++20",
"compilerPath": "/usr/bin/g++-11",
"compilerArgs": [
    "-std=c++20",
    "-Wall",

编译代码没有错误或警告。没有标记其他标准库函数。 Barrier 是 C++20 的一部分,GCC 11 支持 C++20。我错过或忽略了什么?

谢谢!

c++ visual-studio-code gcc c++20
1个回答
0
投票

哇,这是一个奇怪的问题,但我已经重新解决了它,尽管我无法告诉您重新创建它的步骤。

我决定硬着头皮做一个小测试用例发送给 C/C++ 扩展开发人员。我对目录进行了 cp -r 来制作问题的副本,然后计划将其削减到最小程度。

我将使用屏障函数,当我编写一些测试代码来尝试它时,这个问题就开始了。我将该测试代码的可执行文件命名为“barrier”。

在新的测试用例目录中,当删除屏障可执行文件时,“命名空间“std”没有成员“屏障”C/C++(135)”错误消失了。有趣的是,当我将名为 Barrier 的可执行文件复制回该目录时,错误没有再出现。一定是某些步骤顺序导致了此问题。自错误出现以来,c_cpp_properties.json 和其他一些内容已被更改。我转到原始目录并删除了屏障可执行文件,错误消失了。我重新生成了屏障可执行文件,错误没有再出现。

同样,我不知道导致此问题的步骤顺序,但我知道我不会再以与标准库函数相同的名称命名任何可执行文件。

© www.soinside.com 2019 - 2024. All rights reserved.