错误:<位/ stdc ++。h>,找不到'cstdalign'文件,正在运行C ++ 17

时间:2020-07-13 13:23:43

标签: c++ xcode c++11 visual-studio-code c++17

我正在尝试在macOS Catalina上的 Visual Studio代码中运行一段代码。 代码:

#include <bits/stdc++.h>
using namespace std;

int main() 
{ 
    // Create an empty vector 
    vector<int> vect;  
     
    vect.push_back(10); 
    vect.push_back(20); 
    vect.push_back(30); 
  
    for (int x : vect) 
        cout << x << " "; 
  
    return 0; 
} 

当我尝试使用 coderunner扩展运行代码时,出现错误消息:

[Running] cd "/Users/VSC_Files/" && g++ -std=c++17 helloworld.cpp -o helloworld && "/Users/VSC_Files/"helloworld
In file included from helloworld.cpp:1:
/usr/local/include/bits/stdc++.h:57:10: fatal error: 'cstdalign' file not found
#include <cstdalign>
         ^~~~~~~~~~~
1 error generated.

[Done] exited with code=1 in 1.465 seconds

显然这仅是C ++ 11的错误,那为什么我会收到此错误?我也拥有最新的Xcode版本和VSCode的最新稳定版本。

编辑后添加

此外,我想补充一下,我手动添加了bits/stdc++.h文件,并且该文件以前没有。

另外,当我在运行时将g++ -std=c++17更改为g++时,程序将运行并显示正确的输出。带有如下所示的警告。
helloworld.cpp:13:15: warning: range-based for loop is a C++11 extension [-Wc++11-extensions]

mt笔记本电脑的默认C ++版本是否存在问题?请帮忙!

5 个答案:

答案 0 :(得分:1)

删除#include<bits/stdc++.h> 插入#include<vector>#include<iostream> 还要删除被认为是不良做法的using namespace std 所以你的代码看起来像这样:

#include <vector>
#include <iostream>

int main() 
{ 
    // Create an empty vector 
    std::vector<int> vect;  
     
    vect.push_back(10); 
    vect.push_back(20); 
    vect.push_back(30); 
  
    for (int x : vect) 
        std::cout << x << " "; 
  
    return 0; 
} 

答案 1 :(得分:0)

我遇到了同样的问题。首先,我通过自制软件安装了gcc

brew install gcc

为避免与现有的gcc(和g ++)二进制文件冲突,自制软件应在二进制文件后加上版本号。发表本文时,最新版本是gcc-10。

此后,您不必复制bits/stdc++.h。只需使用g++-<major-version-number>而不是g++进行编译,这将使用本地安装的二进制文件而不是默认的osx二进制文件。对我来说是

g++-10 -Wall -O2 -std=c++11 test.cpp -o test

要检查homebrew安装的二进制名称,您可以在/usr/local/bin目录中查找,因为那是homebrew安装软件包的位置。

还要确保usr/local/bin/usr/bin位于$PATH之前

答案 2 :(得分:0)

<块引用>

我正在分享使用以下命令执行数组旋转的示例代码的步骤

g++-10 -Wall -O2 -std=c++11 rotatearrayusingdeque.cpp

<块引用>

然后生成一个.out 文件。

./a.out

<块引用>

示例代码

#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int main() 
{
    int n,r,i,j,temp=0,n1;
    deque<int> v;
    cin>>n>>r;  
    for(i=0;i<n;i++)
    {
        cin>>n1;
        v.push_back(n1);
        
    }
    for(j=0;j<r;j++)
    {
        temp = v.front();
        v.pop_front();
        v.push_back(temp);
    }
    for(auto x:v)
    {
        cout<<x<<" ";
    }
    cout<<endl;

    return 0;
}
<块引用>

现在,不会有任何错误,谢谢

答案 3 :(得分:0)

我也遇到了这些错误,我通过注释掉 <cstdalign> 部分解决了这些错误。

注释掉这些行后,它会再出现 2 个错误 - cuchar not found<memory_resources> not found,请使用 "//" 注释它们。它不会伤害你的 stdc++.h 文件。它肯定会奏效。

enter image description here

答案 4 :(得分:-1)

对我来说,它在文件bits/stdc++.h中注释了以下几行:

// #include <cstdalign>

...

// #include <cuchar>

该文件位于/usr/local/include/bits//Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/bits中。 我不知道您是否必须在两个文件中都这样做,但是第一个文件对我有用!