【问题标题】:Multiple Errors When Writing C++ in Sublime Text 3在 Sublime Text 3 中编写 C++ 时出现多个错误
【发布时间】: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 使用 &lt;&lt;,而不是 &gt;&gt;std::cin 使用 &gt;&gt;,而不是 &lt;&lt;
  • 对于已弃用的标头警告,您可以尝试 this modified std_lib_facilities.h。我不能保证它会起作用,所以先备份另一个。请注意,您需要使用-std=c++11 进行编译。我不知道还有什么可以替代无序地图。我还没有读过这本书,但我认为该标题无论如何都不会使用很长时间。对于初学者来说,这主要是一些简化学习和发现错误的技巧。
  • @chris 谢谢你-我会试一试!
  • 另一个选项,只要你保持你的 GCC 版本相同(未来可能会摆脱那个头文件)是用 -Wno-deprecated 编译并且忽略关于弃用头文件的警告。将来,如果您在自己的代码中需要哈希映射,&lt;unordered_map&gt; 中有一个。这本书只是在该标题正式存在三年前写成,所以它必须解决这个问题。

标签: c++ gcc sublimetext3


【解决方案1】:

首先,MinGW 和 Cygnus 只是 GCC 编译器的安装程序。正如 Preet Kukreti 已经评论的那样,您应该尝试像 Visual Studio Express 这样的 IDE,或者如果您不想要 Microsoft 的东西,您应该尝试免费的 CodeBlocks。

我不建议在没有 IDE 的情况下在 Windows 上学习 C++。如果你想使用文本编辑器和命令行来编写 C++,你可能应该使用 linux。

【讨论】:

  • 通常我不会赞成这样的回应,但可悲的事实是,在没有合适的 IDE 的情况下,您正在与 GCC 或在 Windows 上使用 clang 进行一场艰苦的战斗。对于此类工具链,Windows 只是一个不太适合的环境。 MSVC 和 VS 是 Windows 初学者的最佳选择。稍后,当您提高技能和品味时,您的意见可能会改变,但现在,减少您的战斗次数。
  • 我在使用 Sublime Text 3 的 GCC 和 Clang 方面做得很好。不过,这是使用 MinGW 而不是 Cygwin。
  • @PreetKukreti 你说得对 - 我认为我可以使用 Sublime Text 之类的东西(我想坚持使用它,因为我喜欢深色背景),但我来了结论是,常规 IDE 是目前的最佳选择(我也想出了如何让背景变暗!)。
  • @brekki,如果你想要 VS 中类似的东西,请导入:studiostyl.es/schemes/monokai。当然,其中的选项也有一个字体和颜色部分,用于更细粒度的调整。尽管如此,它还是很像 Sublime 的颜色。
  • 就使用命令行而言,我看不出在 Windows 上使用 VC 学习 C++ 与在 Linux 上使用 GCC 学习有什么不同。为什么输入cl /W4 /Za /EHsc test.cpp 比输入g++ -Wall -std=c++03 -o test test.cpp 更难?
【解决方案2】:

您可能还不知道如何设置编译器,所以为了让您更容易,我建议您使用 IDE,例如 Code::Blocks。它带有一个编译器 (MinGW),因此您不必自己安装。还有其他的 C++ IDE,但这是我所知道的最完整和最易于使用的 IDE。

您书中示例的问题是您颠倒了 > 符号: stream &lt;&lt; variable 与 cout 之类的输出流一起使用,它不适用于输入流,而 stream &gt;&gt; variable 仅适用于 cin 之类的输入流。

这意味着您的代码应该如下所示:

//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; //result in kilometers = length in miles * 1.609 (not /)
    cout << miles << " miles is equal to " << result /*You want the result here, not the length of 1 mile in kilometers*/ << " kilometers" << endl;
    return 0;
}

【讨论】:

    猜你喜欢
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多