声明Windows API结构(DCB)的对象 - 错误C4430:缺少类型说明符 - 假定为int

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了声明Windows API结构(DCB)的对象 - 错误C4430:缺少类型说明符 - 假定为int相关的知识,希望对你有一定的参考价值。

我正在尝试创建一个C ++程序,以便在Windows 7的Visual Studio社区2017中使用Windows API与串行端口设备进行通信。

试着编译这段代码:

#include <iostream>
#include <Windows.h>
#include "stdafx.h"
#pragma hdrstop
using namespace std;

DCB dcb;

int main()
{
    return 0;
}

我得到这些错误指向DCB dcb;

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
error C2146: syntax error: missing ';' before identifier 'dcb'

The DCB structure在Winbase.h中定义如下:

typedef struct _DCB {
    DWORD DCBlength;      /* sizeof(DCB)                     */
    DWORD BaudRate;       /* Baudrate at which running       */
    DWORD fBinary: 1;     /* Binary Mode (skip EOF check)    */
    DWORD fParity: 1;     /* Enable parity checking          */
    DWORD fOutxCtsFlow:1; /* CTS handshaking on output       */
    DWORD fOutxDsrFlow:1; /* DSR handshaking on output       */
    DWORD fDtrControl:2;  /* DTR Flow control                */
    DWORD fDsrSensitivity:1; /* DSR Sensitivity              */
    DWORD fTXContinueOnXoff: 1; /* Continue TX when Xoff sent */
    DWORD fOutX: 1;       /* Enable output X-ON/X-OFF        */
    DWORD fInX: 1;        /* Enable input X-ON/X-OFF         */
    DWORD fErrorChar: 1;  /* Enable Err Replacement          */
    DWORD fNull: 1;       /* Enable Null stripping           */
    DWORD fRtsControl:2;  /* Rts Flow control                */
    DWORD fAbortOnError:1; /* Abort all reads and writes on Error */
    DWORD fDummy2:17;     /* Reserved                        */
    WORD wReserved;       /* Not currently used              */
    WORD XonLim;          /* Transmit X-ON threshold         */
    WORD XoffLim;         /* Transmit X-OFF threshold        */
    BYTE ByteSize;        /* Number of bits/byte, 4-8        */
    BYTE Parity;          /* 0-4=None,Odd,Even,Mark,Space    */
    BYTE StopBits;        /* 0,1,2 = 1, 1.5, 2               */
    char XonChar;         /* Tx and Rx X-ON character        */
    char XoffChar;        /* Tx and Rx X-OFF character       */
    char ErrorChar;       /* Error replacement char          */
    char EofChar;         /* End of Input character          */
    char EvtChar;         /* Received Event character        */
    WORD wReserved1;      /* Fill for now.                   */
} DCB, *LPDCB;`
答案

当您使用预编译的标题时,行上方的任何内容

#include "stdafx.h"

(或者为预编译指定的标头名称)

被忽略了。

尝试重新安排您的包含以将其放在首位。

更多解释on MSDN,特别重要的是:

编译器将.h文件之前发生的所有代码视为预编译。它跳到与.h文件关联的#include指令之外,使用.pch文件中包含的代码,然后在文件名后编译所有代码。

以上是关于声明Windows API结构(DCB)的对象 - 错误C4430:缺少类型说明符 - 假定为int的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JCL/汇编器中为 QSAM put-locate 正确声明 DCB

使用Signature Tool自动生成P/Invoke调用Windows API的C#函数声明

windows进程中的内存结构(好多API,而且VC最聪明)

C结构

windows.h 的 C++ 问题,在 vs17 中非法声明匿名“结构”

Windows API中的数据结构