2013-05-13 102 views
0

我正在用C++编程一个游戏。我想使用std :: cout从我的代码中打印调试消息,但由于这是一个GUI应用程序,因此默认情况下没有控制台可以打印。我试图简单地从CMD运行它,像这样:用于调试消息的跨平台GUI应用程序控制台C++

start Debug/hydro.exe 

但无济于事。使用Visual Studio 2012提供Win32项目

在Windows 8 x86_64的,下面的代码实现了什么,我在寻找:

#include <Windows.h> 
... 
AllocConsole(); 
freopen("CONIN$", "r",stdin); 
freopen("CONOUT$", "w",stdout); 
freopen("CONOUT$", "w",stderr); 

但是,我认为,这不是跨平台(做,如果纠正我,我错了!),并希望我的应用程序能够在Linux和Mac OS X上工作。

是否有跨平台的解决方案?当然,越简单越好!

+1

如果你想“控制台”调试消息,并使用'std :: cout',只需从终端窗口运行程序?大多数程序(游戏或其他)都是这样做的。 – 2013-05-13 18:07:23

+0

我试过(这是我如何解决Linux上的程序),但没有打印。我正在使用std :: cout。 – OMGtechy 2013-05-13 18:08:26

回答

1

我不知道任何在Linux世界中都会这样做的产品 - 您需要从shell启动代码,并且输出会出现在shell窗口中。

包装这应该帮助:

#ifdef _WIN32 
// Windows-only code here 
#endif 

当Windows之外,代码不会被编译,当Windows内部的代码会被编译!

+0

#ifdef _WIN32作品:) – OMGtechy 2013-05-13 18:24:34

+0

这是一个宏的作品,是的。我希望我可以传达这个原则,而不必查看相关的宏被称为...;) – 2013-05-13 18:30:06

+0

只是编辑它以保存阅读所有评论的人:) – OMGtechy 2013-05-13 23:12:33

0

如果您的代码取决于<Windows.h>那么它肯定不是跨平台的。

查看log4cxx进行跨平台记录。这是一个非常稳定,成熟的平台。 PS:用跨平台的GUI编程祝你好运。 GUI编程通常非常特定于平台。像Qt这样的框架可能会有很大的帮助,如果你正在做3D图形,一定要使用OpenGL而不是DirectX。

+0

我目前使用SFML,尽管我也对Qt感兴趣!我现在来看看log4cxx,谢谢!如果有效,我会将其标记为解决方案。 – OMGtechy 2013-05-13 18:14:43

+0

另一种解决方案适用于我,而且容易得多。谢谢你! – OMGtechy 2013-05-13 18:24:03

+0

@JoshuaGerrard不是Windows程序员,我想我可能误解了你的问题。你说得对,log4cxx并没有真正解决你的问题,因为我现在明白了。虽然在另一种解决方案的基础上使用它可能仍然很好,但它比使用标准输出/错误更有效。 – 2013-05-13 19:25:59