代码之家  ›  专栏  ›  技术社区  ›  Benoît photo_tom

什么能解释STD::不显示任何东西?

  •  14
  • Benoît photo_tom  · 技术社区  · 14 年前

    无论什么原因,STD::CUT都不显示任何与我的应用程序。下面是对我的开发环境的描述。

    我正在使用qt creator开发qt应用程序。由于qt creator无法从我的工作站(xp64)启动,我目前正在用visual studio 2008和qt插件(通过导入.pro项目文件)开发它。一切看起来都很好,应用程序运行正常。

    在某些情况下(取决于命令行参数),我不想启动him,只想在cli中显示几个句子(例如,命令行必需的参数)。

    我没有任何错误,但是没有显示任何内容。 我确信运行的相应代码是(经典的)以下代码:

    std::cout << "is this going to be displayed ?" << std::endl;
    

    你知道为什么什么都不显示吗?

    5 回复  |  直到 6 年前
        1
  •  17
  •   Benoît photo_tom    14 年前

    好的,找到答案了。当然,当遇到这样的问题时,答案很简单。迈克尔·亚伦走对了路。

    只要在项目配置(/configuration properties/linker/system)中将子系统更改为控制台,就可以使整个过程正常工作。gui仍然可以工作,但是有一个后台控制台。我能应付的。

        2
  •  15
  •   jamesdlin    6 年前

    在windows上,程序通常被构建为 SUBSYSTEM:WINDOWS application or as SUBSYSTEM:CONSOLE .

    使用subsystem:console构建的程序应该是文本模式的应用程序。对于这种类型的应用程序,stdout和stderr将打印到您从中启动它们的控制台,如果需要,将创建一个新控制台。

    相反,子系统:windows应用程序不需要控制台。你仍然可以给stdout和stderr写信,但他们哪儿也去不了。你可以用 AllocConsole 创建要打印到的控制台,但请注意,这将始终打印到新创建的控制台窗口,而不是从中启动程序的控制台窗口。

    子系统的一个技巧是:windows应用程序即使没有控制台,也可以通过管道传输stdout和stderr。因此,要使用管道stdout,可以执行以下操作:

    YourApplication.exe > output.txt
    

    或者如果你有 cat (或同等物):

    YourApplication.exe | cat
    

    还要注意的是,除了在创建进程时windows如何对待它们之外,subsystem:windows应用程序和subsystem:console应用程序之间实际上没有任何区别。(您可以在subsystem:console应用程序中创建窗口。) You therefore can easily switch between SUBSYSTEM types (例如,使用subsystem:console进行调试构建,使用subsystem:windows进行发布)。

        3
  •  8
  •   ktk    14 年前

    尝试

    配置+=控制台

    在你的.pro文件中。

        4
  •  4
  •   Michael Aaron Safyan    14 年前

    windows区分控制台应用程序和gui应用程序,默认情况下不为gui应用程序创建控制台( see this page from MSDN )你可以使用 AllocConsole 创造一个。

        5
  •  0
  •   manuel    14 年前

    也许不是STD::CUT线使它不显示,而是包含它的函数。也许根本就没有被调用,这就是为什么STD::CUT不起作用。