Синтаксическая ошибка C2061 (идентификатор) - PullRequest
6 голосов
/ 02 сентября 2010
1>cb.c(51): error C2061: syntax error : identifier 'SaveConfiguration'
1>cb.c(51): error C2059: syntax error : ';'
1>cb.c(51): error C2059: syntax error : 'type'
1>cb.c(52): error C2061: syntax error : identifier 'LoadConfiguration'
1>cb.c(52): error C2059: syntax error : ';'
1>cb.c(52): error C2059: syntax error : 'type'
1>cb.c(122): error C2061: syntax error : identifier 'SaveConfiguration'
1>cb.c(122): error C2059: syntax error : ';'
1>cb.c(122): error C2059: syntax error : 'type'
1>cb.c(127): error C2061: syntax error : identifier 'LoadConfiguration'
1>cb.c(127): error C2059: syntax error : ';'
1>cb.c(127): error C2059: syntax error : 'type'
1>
1>Build FAILED.

Это всего лишь один файл .c в проекте.Вот код:

#define WIN32_LEAN_AND_MEAN

#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <process.h>
#include <tchar.h>

typedef struct _Configuration
{
    int             KeyActivate;
    int             BlockWidth;
    int             BlockHeight;
    double          HueStart;
    double          HueEnd;
    double          SaturationStart;
    double          SaturationEnd;
    double          ValueStart;
    double          ValueEnd;
} Configuration;

typedef struct _DIBSection
{
    HDC     ScreenDC;
    HDC     WindowDC;
    HDC     MemoryDC;
    HBITMAP ScreenBMPHandle;
    BITMAP  ScreenBMP;
} DIBSection;

typedef struct _Thread
{
    HANDLE      Handle;
    unsigned    Id;
} Thread;

typedef struct _Window
{
    HANDLE  Handle;
    HDC     DC;
    int     Width;
    int     Height;
    int     Top;
    int     Left;
} Window;

__declspec ( dllexport ) int Initialize ( void );
unsigned __stdcall Start ( void * Arguments );

void LoadDefaultConfiguration ( Configuration * Config );
bool SaveConfiguration ( Configuration * Config, LPTSTR FilePath );
bool LoadConfiguration ( Configuration * Config, LPTSTR FilePath );

Thread          MainThread;
Window          Screen;
Configuration   Settings;

BOOL WINAPI DllMain ( HINSTANCE Instance, DWORD Reason, LPVOID Reserved )
{
    switch ( Reason )
    {

        case DLL_PROCESS_ATTACH:

            // TODO: Load settings from file
            LoadDefaultConfiguration ( & Settings );

            // Create main thread
            MainThread.Handle = (HANDLE) _beginthreadex (
                NULL,
                0,
                Start,
                NULL,
                0,
                & MainThread.Id
                );

            if ( MainThread.Handle )
            {
                SetThreadPriority ( MainThread.Handle, THREAD_PRIORITY_BELOW_NORMAL );
            }
            else
            {
                MessageBox ( NULL, L"Unable to create main thread; exiting", L"Error", MB_OK );
                ExitProcess ( 0 );
            }

            break;

        case DLL_PROCESS_DETACH:

            break;

    }

    return TRUE;
}

__declspec ( dllexport ) int Initialize ( void )
{
    return 1;
}

unsigned __stdcall Start ( void * Arguments )
{
    return 1;
}

void LoadDefaultConfiguration ( Configuration * Config )
{
    Config->BlockHeight = 50;
    Config->BlockWidth = 100;
    Config->HueEnd = 0.00;
    Config->HueStart = 0.00;
    Config->KeyActivate = VK_SHIFT;
    Config->SaturationEnd = 0.00;
    Config->SaturationStart = 0.00;
    Config->ValueEnd = 0.00;
    Config->ValueStart = 0.00;
}

bool SaveConfiguration ( Configuration * Config, LPTSTR FilePath )
{
    return true;
}

bool LoadConfiguration ( Configuration * Config, LPTSTR FilePath )
{
    return true;
}

Строка 51 -

bool SaveConfiguration ( Configuration * Config, LPTSTR FilePath );

Ответы [ 2 ]

8 голосов
/ 02 сентября 2010

bool не относится к типу C.

Я подозреваю, что BOOL определено где-то.

То же самое касается использования true и false.

7 голосов
/ 02 сентября 2010

На самом деле, bool - это допустимый тип (ну, на самом деле, макрос) в стандарте C99, если вы используете недавний компилятор. Вам необходимо добавить:

#include <stdbool.h>

Обратите внимание, что bool недопустимо в более старых вариантах стандартов C для ANSI, C89, C90 и т. Д.


Как подчеркнул JeremyP в комментариях, компилятору Microsoft C по-прежнему не хватает надлежащей поддержки функций C99.

Что оставляет три альтернативы:

  1. Рассматривайте это как C ++, а не C; потому что C ++ имеет bool как встроенный тип
  2. Создайте собственную bool реализацию
  3. Перепишите код, чтобы избежать использования bool

Для варианта 2 что-то подобное будет работать, но это уродливый обходной путь:

typedef short bool;
#define true 1
#define false 0
...