错误:<bits/stdc++.h>,未找到“cstdalign”文件,正在运行 C++17

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

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

#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++版本有问题吗?请帮忙!

c++ xcode c++11 visual-studio-code c++17
5个回答
6
投票

#include<bits/stdc++.h>
是 GCC 的内部标头,您不应该使用它,它不可移植。

删除

#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; 
} 

3
投票

我也遇到了同样的问题。首先我通过 homebrew 安装了 gcc

brew install gcc

为了避免与现有的 gcc(和 g++)二进制文件发生冲突,自制程序以 version 为后缀命名二进制文件。在发表此评论时,最新的是 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

之前

1
投票

我也遇到了这些错误,我通过注释掉

<cstdalign>
部分解决了这些错误。

注释掉这些行后,它会再出现 2 个错误 -

cuchar not found
<memory_resources> not found
,请使用“//”注释它们。它不会损害您的 stdc++.h 文件。而且一定会成功的。

enter image description here


0
投票

对我来说,可以在文件中注释掉以下几行

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
中。 我不知道您是否必须在两个文件中都执行此操作,但第一个文件对我有用!


12 月 24 日更新: 如果您在命令行中使用 g++,则无需将任何文件移动到任何目录中!

例如,当我使用命令时:

g++ custom_file.cpp
它工作正常! 另外你可以添加
-std=c++11
来拥有最需要的功能。 另外,在 Xcode 更新后,我不需要必须移动
bits/stdc++.h
文件。

我希望这有帮助!


-1
投票

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

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;
}

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

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