2017-12-29 11 views
0

Ich versuche, ein C++ - Programm für die Kommunikation mit einem seriellen Gerät über die Windows-API in Visual Studio Community 2017 unter Windows zu erstellen 7.Deklarieren eines Objekts einer Windows-API-Struktur (DCB) - Fehler C4430: Fehlender Typspezifizierer - int angenommen

dieses Stück Code zu kompilieren Versuch:

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

DCB dcb; 

int main() 
{ 
    return 0; 
} 

ich diesen Fehler Hinweis auf 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 ist in winbase.h wie folgt definiert:

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

+1

@stark: nicht das Problem, 'windows.h' gehören' winbase.h' –

+0

@stark: Von der [Dokumentation] (https://msdn.microsoft .com/de-us/library/windows/desktop/aa363214.aspx): * "Kopfzeile: Winbase.h (** include Windows.h **)" *. – IInspectable

Antwort

1

Wenn Sie vorkompilierte Header verwenden, etwas oberhalb der Linie

#include "stdafx.h" 

(oder was auch immer der Name des Headers für Vorübersetzung bezeichnet)

wird ignoriert.

Versuchen Sie, Ihre Includes neu anzuordnen, um diese zuerst zu platzieren.

Weitere Erklärung on MSDN, besonders wichtig ist dies:

Der Compiler behandelt alle Code vor der H-Datei als vorkompilierte auftritt. Es springt direkt über die # include-Direktive hinaus, die mit der .h-Datei verknüpft ist, verwendet den in der .pch-Datei enthaltenen Code und kompiliert dann den gesamten Code nach dem Dateinamen.

+0

Oder fügen Sie diese anderen Includes in 'stdafx.h' ein, was der Punkt der vorkompilierten Header ist. –

+0

@ JonathanPotter: Ja, putting system header umfasst innerhalb 'stdafx.h' ist eine gute Praxis. Definitiv nicht empfohlen für projektlokale Header, da dies den gesamten Vorteil von PCH zunichte macht. –

Verwandte Themen