Compile in c++14

Compile in c++14

本文关键字:c++14 in Compile      更新时间:2023-10-16

因此,在我的CSE课程中,我们得到了一个头文件,用于我们正在编写的程序。

不幸的是,我无法让终端使用该头进行编译,这会导致相当多的错误(仅使用"g++"进行编译)。此外,当我在大学里使用PuTTY时,我在使用这个标题时也会遇到同样的错误。然而,当我使用"g++-std=c++14"进行编译时,我不会得到错误。

我曾尝试在mac上的终端上使用此命令进行编译,但它表示无法识别c++14部分。

dhcp-10-202-147-243:hw1pr1 Admin$ g++ -std=c++14 hw1pr1.cpp
error: invalid value 'c++14' in '-std=c++14'

如果能为我提供任何帮助,我将不胜感激。希望这一切都有某种意义。

这是我在终端中用g++编译头文件时遇到的错误。

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/ext/hash_map:212:5: warning: 
      Use of the header <ext/hash_map> is deprecated. Migrate to <unordered_map>
      [-W#warnings]
#   warning Use of the header <ext/hash_map> is deprecated.  Migrate to ...
    ^
In file included from read_first_name.cpp:1:
./std_lib_facilities_4.h:43:20: error: no matching function for call to object
      of type 'hash<char *>'
            return hash<char*>()(s.c_str());
                   ^~~~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/ext/__hash:39:12: note: 
      candidate function not viable: 1st argument ('const value_type *'
      (aka 'const char *')) would lose const qualifier
    size_t operator()(char *__c) const _NOEXCEPT
           ^
In file included from read_first_name.cpp:1:
./std_lib_facilities_4.h:112:8: warning: comparison of unsigned expression < 0
      is always false [-Wtautological-compare]
                if (i<0||size()<=i) throw Range_error(i);
                    ~^~
./std_lib_facilities_4.h:118:8: warning: comparison of unsigned expression < 0
      is always false [-Wtautological-compare]
                if (i<0||size()<=i) throw Range_error(i);
                    ~^~
3 warnings and 1 error generated.

这个错误不会发生,当我使用PuTTY和"g++std=c++14"时,程序将完全编译

C++标准之间有很多变化,因此在一个版本中有效的内容不必在另一个版本。

g++默认为C++的-std=gnu++98,这是几十年前的C++98标准,通过GNU扩展进行了增强(其中大多数都是一致的)。

选择合适的修订版:-std=c++1y -pedantic非常接近C++14。

C++14中引入的哪些更改可能会破坏用C++11编写的程序?

看看你说你必须使用什么以及.cpp文件的名称格式,我想我是同类的。一年后,看起来像,但为了存档,这里是我的解决方案:

std_lib_facilities.h标头随Bjarne Stroustrup教科书"编程:使用C++的原理和实践"一起提供。对于那些不知道的人来说,Bjarne Stroustrup发明了C++(他很清楚自己在说什么)。顺便说一句,如果你花时间真正阅读这本书的话,这本书是学习C++的一种极好的方式。std_lib_facilities.h头文件只是C++初学者的一个方便的头文件,它包含到教科书中使用的所有主要标准库的链接,以及一些帮助解释潜在错误或错误的辅助函数,或者只是为了学习方便(比如为学生处理简单异常抛出的error()函数,或者添加向量的"越界"检查)。这最终只是一种让学生直接进入代码的方式,而不必学习有关标头的细节。Stroustrup使用C++不断更新,因此包含了几个需要C++11标准的库。CSCE系希望其学生(至少在这门早期课程中)连接到该系的Unix系统并从那里进行编译,以避免与下载和更新编译器混淆。

我碰巧之前已经有了几个C++类,因此已经在我的Ubuntu笔记本电脑上设置了g++。我尽可能长时间地避免包含std_lib_facilities,因为我遇到了与Topic Creator Joe相同的错误,g++无法识别"c++11"部分(手动包含所需的库可以很好地工作,直到我们不得不使用教科书中使用头的帮助函数之一的类)。最终,我在网上找到了一个帮助主题,建议我简单地将g++编译器更新到4.7或更高版本,因为4.6或更低版本不支持C++11(当然也不支持C++14)。奇怪的是,与Mac或Windows上可能使用的更新相比,它相当复杂,我怀疑确切的过程是否适用,但这很可能是问题所在:它只是g++的旧版本,需要更新才能编译C++11及更高版本。我建议搜索更新Mac版g++/gcc的方法。

你知道,如果其他有这个问题的人偶然发现了这个问题,他们的问题还没有解决。