gpt4 book ai didi

c++ - 为什么包含windows.h会产生语法错误,从而阻止类的实例化? (C2146,C2065)

转载 作者:行者123 更新时间:2023-12-02 10:13:07 25 4
gpt4 key购买 nike

(平台详细信息:Windows 10,Visual Studio C++(MSVC 14.26.28801))
这是一个基本的复制。考虑以下程序,该程序运行良好:

struct Rectangle {};

int main() {
Rectangle rect {};
}
编译并按预期运行。
但是现在,如果我们将导入方式引入到windows.h中,如下所示:
#include <Windows.h>

struct Rectangle {};

int main() {
Rectangle rect {};
}
我们得到以下编译错误:
  • syntax error: missing ';' before identifier 'rect' (C2146) [25, 5]
  • 'rect': undeclared identifier (C2065) [25, 5]
  • expected a ';' [25, 15]
  • 'rect': undeclared identifier (C2065) [26, 5]
  • identifier "rect" is undefined [26, 32]
  • function call missing argument list (C4551) [25, 5]

  • kes!
    微软的文档并没有太多的见解:
    https://docs.microsoft.com/en-us/cpp/error-messages/compiler-errors-1/compiler-error-c2146?view=vs-2019
    (我对C++还是陌生的,如果这很明显,我深表歉意)
    我假设Windows.h中某处存在某种...伪指令,它会改变某种行为,但我不确定要搜索或寻找什么。
    谢谢!

    最佳答案

    Derp好吧,找到答案了。
    我使用Rectangle作为“hello world”示例。
    原来windows.h已经包含一个“矩形”,这意味着符号会碰撞
    (https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-rectangle)
    隐式“Windows.h中的所有内容现在都可以在全局 namespace 中使用!”让我措手不及。
    (将我的类(class)名称更改为“Marks_Rectangle”可以解决该问题!)

    关于c++ - 为什么包含windows.h会产生语法错误,从而阻止类的实例化? (C2146,C2065),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62841552/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com