【发布时间】:2014-09-18 20:16:34
【问题描述】:
让我先说我已经搜索了(几天以来)这些问题的答案,但找不到任何解决问题的方法。事实上,我想我只会让事情变得更糟。
另外,在编程方面,我是一个完全的初学者,并且正在自学 C++(我知道,我知道,你不应该从 C++ 作为你的第一门编程语言开始)。
我知道在 StackOverflow 指南中,它说在发布任何代码之前先描述您的问题,但我的部分问题是我什至不明白问题是什么......
作为参考,我正在运行 Windows 7 64 位并在 Sublime Text 3(构建 3059)中编写我的代码,而且,我不完全确定我在用什么编译它,我的意思是我有 gcc已安装(?)但我认为这是问题的一部分——我安装了名为 Cygnus 以及 MinGW 和 Visual Studio Express 2012 的东西,但我不确定这些是否真的是编译器/我只是不知道他们做了什么.另外,我已经多次修改了我的环境路径变量,这可能是个坏主意。
不管怎样,这是两个问题中第一个问题的代码:
#include <iostream>
using namespace std;
int main ()
{
cout << "Hello World! ";
return 0;
}
当我“构建”代码时,它工作正常,但是当我尝试运行它时,这是我得到的错误:
bash.exe: warning: could not find /tmp, please create!
[sig] C:\cygnus\cygwin-b20\H-i586-cygwin32\bin\bash.exe 1020 (0) call_handler: couldn't get context of main thread, error 998
我已经搜索了如何添加/创建 bash,但实际上并不理解我找到的答案。
这是我的第二个问题。我正在从 Stroustrup 的“C++ 编程语言,第 4 版”中学习 C++,其中有几章要求读者包含一个标题(“std_lib_facilities.h”),我已将它与我的练习文件一起保存并放在文件夹中.这是我自己编写的一些代码(可能都是错误的),但即使从书中复制代码并运行它也会产生此错误。 (我尝试过仅使用 #include 和 using namespace std;但是仍然无法正常工作。)
//convert from miles to kilometers. 1.609km in 1 mile
#include "std_lib_facilities.h"
int main()
{
cout >> "Please enter a length in miles: " >> endl;
float miles = 0;
cin << miles;
float kilometers = 1.609;
float result = miles / kilometers;
cout >> miles >> " miles is equal to " >> kilometers >> endl;
return 0;
}
当我尝试构建它时它产生的错误非常长,所以我会发布它的sn-p:
In file included from c:\users\brekki\gcc\bin\../lib/gcc/x86_64-w64- mingw32/4.7.0/../../../../include/c++/4.7.0/ext/hash_map:61:0,
from C:\Users\brekki\Desktop\CPP\MINE\std_lib_facilities.h:21,
from C:\Users\brekki\Desktop\CPP\MINE\mtokm.cpp:2:
c:\users\brekki\gcc\bin\../lib/gcc/x86_64-w64- mingw32/4.7.0/../../../../include/c++/4.7.0/backward/backward_warning.h:33:2: warning: #warning This file includes at least one deprecated or antiquated header which may be removed without further notice at a future date. Please use a non-deprecated interface with equivalent functionality instead. For a listing of replacement headers and interfaces, consult the file backward_warning.h. To disable this warning use -Wno-deprecated. [-Wcpp]
C:\Users\brekki\Desktop\CPP\MINE\mtokm.cpp: In function 'int main()':
C:\Users\brekki\Desktop\CPP\MINE\mtokm.cpp:5:10: error: no match for 'operator>>' in 'std::cout >> "Please enter a length in miles: "'
C:\Users\brekki\Desktop\CPP\MINE\mtokm.cpp:5:10: note: candidates are:
In file included from c:\users\brekki\gcc\bin\../lib/gcc/x86_64-w64- mingw32/4.7.0/../../../../include/c++/4.7.0/string:55:0,
from c:\users\brekki\gcc\bin\../lib/gcc/x86_64-w64- mingw32/4.7.0/../../../../include/c++/4.7.0/bits/locale_classes.h:42,
from c:\users\brekki\gcc\bin\../lib/gcc/x86_64-w64-mingw32/4.7.0/../../../../include/c++/4.7.0/bits/ios_base.h:43,
from c:\users\brekki\gcc\bin\../lib/gcc/x86_64-w64- mingw32/4.7.0/../../../../include/c++/4.7.0/ios:43,
from c:\users\brekki\gcc\bin\../lib/gcc/x86_64-w64- mingw32/4.7.0/../../../../include/c++/4.7.0/ostream:40,
from c:\users\brekki\gcc\bin\../lib/gcc/x86_64-w64- mingw32/4.7.0/../../../../include/c++/4.7.0/iostream:40,
from C:\Users\brekki\Desktop\CPP\MINE\std_lib_facilities.h:4,
from C:\Users\brekki\Desktop\CPP\MINE\mtokm.cpp:2:
当我尝试运行该程序时,我得到一个类似的错误,除了它前面是“bash.exe:警告:”
- 我对可能出现的问题的看法是:
- 我搞砸了我的路径变量
- 我的 GCC 文件已过时
- 试图使用太多编译器
- 错误的 Sublime Text 3 C++ 构建
- Stroustrup 的标头导致明显问题
抱歉,这个问题很长,可能很愚蠢。任何见解都将不胜感激。
【问题讨论】:
-
我应该提到我也安装了 Visual Studio Express 2012。
-
std::cout使用<<,而不是>>。std::cin使用>>,而不是<<。 -
对于已弃用的标头警告,您可以尝试 this modified
std_lib_facilities.h。我不能保证它会起作用,所以先备份另一个。请注意,您需要使用-std=c++11进行编译。我不知道还有什么可以替代无序地图。我还没有读过这本书,但我认为该标题无论如何都不会使用很长时间。对于初学者来说,这主要是一些简化学习和发现错误的技巧。 -
@chris 谢谢你-我会试一试!
-
另一个选项,只要你保持你的 GCC 版本相同(未来可能会摆脱那个头文件)是用
-Wno-deprecated编译并且忽略关于弃用头文件的警告。将来,如果您在自己的代码中需要哈希映射,<unordered_map>中有一个。这本书只是在该标题正式存在三年前写成,所以它必须解决这个问题。
标签: c++ gcc sublimetext3