建造时来自wingdi.h的100多个错误

时间:2016-06-16 14:15:13

标签: c++

所以我正在制作一个游戏,一个ASCII地牢探险家,我有一个计划来获取窗口大小并将显示缩放到地下城旁边的库存。我继续google找到一个可以返回窗口大小的函数,这样我就可以在旁边打印inv了......注释掉的部分是我找到的代码,所以我试着把它放在我的main.cpp中试试看吧。我打算使用我发现的其他函数来获取窗口的最大大小并设置大小。我粘贴到我的代码中的这段代码在我运行游戏时给了我很多错误,大约180个错误来自一个名为wingdi.h的头文件。我google了一点,发现人们改变了我尝试的项目属性中的一些定义,它给了我大约130个来自不同标题的错误。有人说其中一个变量已经在windows.h中声明了,那个问这个问题的人应该改成别的东西,所以我把csbi改成了my_csbi,两者都没有用。有些人还说这是代码的问题,所以我决定暂时离开它,回到我的旧代码,现在做一些其他事情(我感到很沮丧,哈哈)。我全力评论,希望以后再回来。当我试图用所有代码运行我的游戏时,它给了我同样的错误。我是否必须重新安装Visual Studio 2015?从头开始我的代码或更改一些定义?

    #include <iostream>
    #include <conio.h>
    //#include <Windows.h>
    #include "GameSystem.h"

    using namespace std;

    int main()
    {
        //int x = 0;
        //int y = 0;

        //CONSOLE_SCREEN_BUFFER_INFO my_csbi;
        //GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &my_csbi);

        //x = my_csbi.srWindow.Right -my_csbi.srWindow.Left + 1;
        //y = my_csbi.srWindow.Bottom -my_csbi.srWindow.Top + 1;

        //printf("columns: %d\n", x);
        //printf("rows: %d\n", y);

        GameSystem gameSystem("level1.txt");

        gameSystem.playGame();

        printf("Enter any key to exit...\n");
        int tmp;
        cin >> tmp;
        return 0;
    }

我对编程很陌生,所以如果我的问题很愚蠢或者简单的话,我很抱歉。如果那冒犯了某种形状或形式的你。 :)

谢谢,笨蛋。

编辑:所有&#34;解决方案&#34;其他人没有为我工作,我决定问这个,因为在我评论完所有代码后,我的旧代码甚至没有运行(之前完美)。

1 个答案:

答案 0 :(得分:1)

  1. 您永远不会直接包含<WinGdi.h>。您始终包含<Windows.h>,它会隐式提取所需的标头。

  2. 如果您正在编写控制台应用程序,GDI函数(来自<WinGdi.h>)对您没有任何帮助。 GetConsoleScreenBufferInfo函数可能是您想要使用的函数,但它不是GDI函数。它是一个核心功能。同样,虽然它在<WinCon.h>中在技术上声明,但您不应该直接包含该标头。只需加入<Windows.h>

  3. 以下代码适用于我 (std::cin实际上并不适用于&#34;输入任何键以退出......&#34;):

    #include <iostream>
    #include <conio.h>
    #include <Windows.h>
    
    using namespace std;
    
    int main()
    {
       CONSOLE_SCREEN_BUFFER_INFO csbi;
       GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);
    
       int x = csbi.srWindow.Right  - csbi.srWindow.Left + 1;
       int y = csbi.srWindow.Bottom - csbi.srWindow.Top  + 1;
    
       printf("columns: %d\n", x);
       printf("rows: %d\n", y);
    
    
       printf("Enter any key to exit...\n");
       int tmp;
       cin >> tmp;
       return 0;
    }
    

    输出:

    columns: 90
    rows: 33
    Enter any key to exit...
    

    如果它不起作用,则必须满足下列条件之一:

    <击> 1。问题出在"GameSystem.h",您没有向我们展示过。
    (很好 - 将来,请将代码作为文本发布,而不是图片。)

    2。您创建了错误类型的项目(使用Win32控制台应用程序模板重新创建新项目)。

    3。您安装Visual Studio时出现问题(尝试重新安装)。