【问题标题】:Why does my program stop working before entering main() [closed]为什么我的程序在进入 main() 之前停止工作 [关闭]
【发布时间】:2017-04-18 09:47:35
【问题描述】:

所以我今天醒来,打开我的项目并尝试运行它 - 幸运的是,它甚至在进入主函数之前就停止了。

但是,它昨晚有效,但现在无效。我没有做任何改变。

这是source.cpp

#include <SFML/Graphics.hpp>
#include "Game.h"
#include <iostream>

using namespace std;


int main()
{
    string name;
    cout << "alupigus";

    name = "Dino Attack";

    Game game(800, 800, name);

    game.loadAssets();

    game.Run();

    return 0;
}

当我在控制台中编译并运行它时,它只显示黑屏。我无法输入任何内容,并且 SFML 的渲染窗口不显示。

我只是将 SFML 用作外部库,但我没有修改任何链接,没有移动其文件等。

【问题讨论】:

  • 尝试用cout &lt;&lt; "alupigus" &lt;&lt; endl;替换cout &lt;&lt; "alupigus";
  • 不确定这有什么帮助,但我修改了它,它没有开始新行或任何东西
  • 您是否尝试过设置断点以查看代码实际执行的程度?
  • 是的,它停在 main 的第一个大括号
  • @noone 当你向前一步时会发生什么?

标签: c++ visual-studio sfml


【解决方案1】:

您没有刷新流。您的代码应如下所示:

#include <SFML/Graphics.hpp>
#include "Game.h"
#include <iostream>

using namespace std;


int main()
{
    string name;
    cout << "alupigus" << endl;

    name = "Dino Attack";

    Game game(800, 800, name);

    game.loadAssets();

    game.Run();

    return 0;
}

另外,考虑删除 using namespace std;,因为这在大型项目中是不好的做法。阅读this

【讨论】:

  • 在上面的代码中使用命名空间 std 并没有做任何有害于公平的事情。
  • 感谢命名空间的提示,但 endl 也不做任何事情,尽管我不确定如果它不将该字符串写入控制台,它应该做什么。
  • @const_ref 我认为这是一个更大的项目,我看不到所有代码。
  • @no one Endl 刷新缓冲区。请运行调试器并分享结果。
  • @Joel - 这是在 main.cpp 中。包含只会影响此文件中的代码,在这种情况下它不会造成任何伤害。包含在标题等中时肯定是不好的做法,但在这种情况下没关系。
【解决方案2】:

好的,所以基本上我解决了这个问题。由于某种原因,这阻止了程序正常运行,尽管我一周没有接触这部分代码

x = Board::dinozaurPoz;
        x.x = rand() % 400 + 200;
        while (Board::matrix[(int)x.y / 40][(int)x.x / 40] != 1) {
            x.x = rand() % 400 + 200;

循环不会无限期地运行,所以我真的不知道这里有什么问题。也许有经验的人可以告诉我我做错了什么。

【讨论】:

  • 作为经验丰富的人,我可以告诉你,脏话在 Stack Overflow 上并不受欢迎。以后请不要使用它。
  • 对不起,这件事困扰了我一整天,以后不会再发生了
猜你喜欢
  • 2012-07-21
  • 2013-07-07
  • 1970-01-01
  • 2013-01-31
  • 2012-04-07
  • 2021-10-31
相关资源
最近更新 更多