在原子中编译,但不在终端中编译

问题描述 投票:0回答:1
#include <iostream>
#include <fstream>
using namespace std;

int main () {
  ofstream fout = ofstream("fout.txt");
}

此代码使用rgbkrk(使用g ++)的脚本包在原子上可以正常编译,但是当我尝试使用g ++在终端上对其进行编译时,会得到以下输出。不知道我在做什么错。

$ g++ test.cpp -o hw
In file included from test.cpp:1:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/iostream:39:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/streambuf:493:64: error: 
      base class 'std::__1::ios_base' has private copy constructor
_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_ios<char>)
                                                               ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/iosfwd:147:32: note: 
      in implicit copy constructor for 'std::__1::basic_ios<char>' first
      required here
    class _LIBCPP_TEMPLATE_VIS basic_ofstream;
                               ^
test.cpp:6:19: note: in implicit copy constructor for
      'std::__1::basic_ofstream<char, std::__1::char_traits<char> >' first
      required here
  ofstream fout = ofstream("fout.txt");
                  ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/ios:313:5: note: 
      declared private here
    ios_base(const ios_base&); // = delete;
    ^
1 error generated.
c++ g++ atom-editor
1个回答
1
投票

首先,这实际上不是GCC。我知道它看起来是这样,因为您执行了g++,但是输出表明您使用的是macOS,而在macOS上,g++实际上是伪装的Clang。是的,这很愚蠢。

第二,在C ++ 17之前,您不能像流一样使用copy-initialisation这样的内容。即使经常删除多余的副本,也总是必须有它们。

所以,而不是:

ofstream fout = ofstream("file.txt");

您应该只写了一个很好的简单声明:

ofstream fout("file.txt");

或:

ofstream fout{"file.txt"};

(ew)

在C ++ 17中,规则已更改,现在省略号为[[强制]],并且不再要求可能的假设副本。因此,在C ++ 17模式下,您的代码应该可以工作。您的手动g++调用不包含任何打开C ++ 17模式的开关,这显然不是您的Clang版本的默认设置。

始终明确指定所需的语言标准版本。我的转到命令是:

g++ -Wall -Wextra -pedantic -std=c++17 test.cpp -o hw

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