2017-12-29 15 views
0

Windows의 Visual Studio 커뮤니티 2017에서 Windows API를 사용하여 직렬 포트 장치와 통신하도록 C++ 프로그램을 만들려고합니다.Windows API 구조 (DCB)의 개체 선언 - 오류 C4430 : 누락 된 형식 지정자 - int가 가정 됨

#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' 

코드의이 비트를 컴파일하려고 7

이 같은 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;` 
+0

WINBASE.H =있는 Windows.h @stark – stark

+1

! 아니 문제는,'windows.h'이'포함 winbase.h' –

+0

@stark 다음 [문서]에서 (https://msdn.microsoft .com/en-us/library/windows/desktop/aa363214.aspx) : * "헤더 : Winbase.h (** include Windows.h **)"*. – IInspectable

답변

1

#include "stdafx.h" 

(또는 어떤 사전 컴파일에 대해 지정된 헤더의 이름)

이 무시됩니다.

포함을 재정렬하여 먼저 포함 시키십시오. 미리 컴파일로 .H 파일 전에 발생한

컴파일러 취급 모든 코드 :

더 설명 on MSDN, 특히 중요한 것은 이것이다. .h 파일과 관련된 #include 지시문을 건너 뛰고 .pch 파일에 포함 된 코드를 사용한 다음 filename 뒤에 모든 코드를 컴파일합니다.

+0

또는 다른 것들을'stdafx.h'에 넣으십시오. 이것은 미리 컴파일 된 헤더의 일종입니다. –

+0

@JonathanPotter : 예, 시스템 헤더를'stdafx.h '안에 넣는 것이 좋습니다. 하지만 확실히 프로젝트 - 로컬 헤더에는 권장되지 않습니다. 그렇게하면 PCH의 모든 이점이 무효화됩니다. –

관련 문제