因此,在我的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‘时,这个错误不会发生,程序将完全编译。
发布于 2014-09-16 02:30:14
C++标准之间有很多变化,所以在一个修订版中有效的内容不需要在另一个修订版中生效。
g++ defaults to -std=gnu++98 for C++,它是有几十年历史的C++98标准,使用GNU扩展进行了增强(大多数扩展都是一致的)。
选择适当的版本:-std=c++1y -pedantic非常接近于C++14。
What changes introduced in C++14 can potentially break a program written in C++11?
发布于 2015-10-15 06:43:25
看看您所说的必须使用的内容和该.cpp文件的名称格式,我想我是在同一个班级。一年后,看起来是这样,但为了存档,我的解决方案是:
std_lib_facilities.h头随Bjarne Stroustrup教科书一起提供,“编程:使用C++的原则和实践”。对于那些不知道的人来说,Bjarne Stroustrup发明了C++ (他很清楚自己在说什么)。顺便说一句,这本书是学习C++的一个很棒的方法,如果你花时间去读它的话。error头文件只是C++初学者使用的一个方便的头文件,其中包含教科书中使用的所有主要标准库的链接,以及一些帮助解决潜在错误或错误的辅助函数,或者只是为了便于学习(例如std_lib_facilities.h ()函数,它为学生处理简单的异常抛出,或者添加对向量的“越界”检查)。归根结底,这只是一种让学生直接跳到代码中的方法,而不必学习关于头部的细节。Stroustrup与C++保持更新,因此包含了几个需要c++11标准的库。CSCE系希望它的学生(至少在这个早期课程中)连接到系的Unix系统并从那里编译,以避免与下载和更新编译器相混淆。
我碰巧之前已经有了几个C++类,因此已经在我的Ubuntu笔记本电脑上设置了g++。我尽可能长时间地避免包含std_lib_facilities,因为我得到了与Topic Creator Joe相同的错误,其中g++无法识别"c++11“部分(手动包含所需的库工作得很好,直到我们不得不使用教科书中的一个类,该类使用了header的助手函数之一)。最后,我在网上找到了一个帮助主题,建议我简单地将我的g++编译器更新到4.7或更高版本,因为4.6和更低版本不支持C++11 (当然,也不支持C++14)。奇怪的是,与在Mac或Windows上使用的更新相比,它相当复杂,我怀疑确切的过程是否适用,但这是( was ?)可能的问题是:它只是一个旧版本的g++,它需要一个更新来编译C++11和更高版本。我建议搜索一下Mac版的g++/gcc的更新方法。
如果,你知道,其他有这个问题的人偶然发现了这个问题,而且他们的问题还没有得到解决。
https://stackoverflow.com/questions/25854252
复制相似问题