Winapi Codelite MinGW G的2个问题++

Winapi Codelite MinGW G的2个问题++,winapi,c++11,linker,g++,mingw32,Winapi,C++11,Linker,G++,Mingw32,我正在使用最新版本的codelite和内置的MingW4.8.1编译器/链接器 我遇到的第一个问题是,当我使用MinGW在Codelite中创建一个新的g++项目,然后将-mwindows标志添加到链接器构建设置以利用HBRUSHGetStockObjectBLACK_笔刷时,代码中的任何cout语句都不会打印到控制台。我需要-mwindows标志才能让GetStockObject工作,但我不知道为什么它会破坏cout语句。代码编译并运行得很好,只是没有任何东西被打印到控制台 我遇到的第二个问题

我正在使用最新版本的codelite和内置的MingW4.8.1编译器/链接器

我遇到的第一个问题是,当我使用MinGW在Codelite中创建一个新的g++项目,然后将-mwindows标志添加到链接器构建设置以利用HBRUSHGetStockObjectBLACK_笔刷时,代码中的任何cout语句都不会打印到控制台。我需要-mwindows标志才能让GetStockObject工作,但我不知道为什么它会破坏cout语句。代码编译并运行得很好,只是没有任何东西被打印到控制台

我遇到的第二个问题是,当我尝试实例化一个基本类时,该类位于不同的项目中,但仍然位于同一工作区下。当我尝试实例化另一个项目中的任何类时,如果我只是链接正在工作的项目中的.h类文件,链接器将发出一个未定义的引用错误。例如:

Framework *test = new Framework();
将耗尽

E:/CodeLite/ElysiumEngine/Main/main.cpp:9: undefined reference to `Framework::Framework()'
当我在标题中包含此api.hpp文件时:

#ifndef FRAMEWORKAPI_HPP
#define FRAMEWORKAPI_HPP

#include "Framework.hpp"

#endif // FRAMEWORKAPI_HPP
但一旦我这样做,代码链接和运行就很好:

#ifndef FRAMEWORKAPI_HPP
#define FRAMEWORKAPI_HPP

#include "Framework.hpp"
#include "Framework.cpp"

#endif // FRAMEWORKAPI_HPP
我从未在任何其他编译器或项目中链接过.cpp文件。这对我来说毫无意义


我能做些什么来解决这两个问题吗?

仅回答您的第一个问题:

-mwindows标志使编译器将-subsystem,windows标志传递给链接器

链接器标志子系统windows使最终可执行文件标记为非控制台窗口应用程序,并将默认入口点设置为WinMainCRTStartup


WinMainCRTStartup不会初始化控制台I/O,因此会忽略在控制台上打印/读取的任何内容

Ok,似乎有两种解决方案。要么设置我的窗口结构,这样我就不需要传递子系统windows标志,要么自己初始化控制台I/O。所以,当我填写WNDCLASSEX窗口结构时,我需要设置什么来设置WNDCLASSEX::hbrBackground,这样我就不需要使用GetStockObject了?另外,如何初始化控制台I/O以便使用它?这将是一个D3D应用程序,所以我想我应该知道如何进行控制台I/O?我找到了这个链接:它显示了如何打开控制台窗口。