Script errors - bool unrecognized and struct issues
I'm compiling my Windows code as C however, I'm running into two problems. One of the errors I'm getting is where "bool" is an undeclared identifier even though it's highlighted as blue in Visual C++ 2005 Express. It's also not recognizing the "done" thing either as that's the name of the boolean variable. The other is that it's not recognizing my struct creations (line #156) saying it must have a struct/union type - uh, it does (or at least I think it does given this).
Code:
// First Windows app.cpp : Defines the entry point for the application.
/*
To do before making the first useful Windows application - what background scaling is (or "The Supernatural Olympics" version 1.1):
Draw images
Syncronize drawing images with monitor refresh rate
Call a function upon pressing a key
*/
/* Trim fat from windows*/
#define WIN32_LEAN_AND_MEAN
#pragma comment(linker, "/subsystem:windows")
/* Pre-processor directives*/
#include "stdafx.h"
#include "Vfw.h"
#include <stdio.h>
#include <windows.h>
// defines and global vars
struct coord_short_xy
{
short x;
short y;
};
/*
short screen_size[2]; // screen resolution (e.g. 1920x1440)
short window_size_base[2]; // expected window size
short window_size[2]; // actual window size
short window_pos[2]; // window position
short window_border[2]; // size of the window border
*/
short title_bar_height; // height of the title bar in pixels
FILE *file_handle; // handle for reading/writing files
char bmp_image[]; // data for the bitmap image
HDRAWDIB img_handle; // pointer for a DrawDib handle
HWND hwnd; // window handle
HDC HDC_handle; // pointer for HDC handle
WNDCLASSEX windowClass; // for a window class
MSG msg; // a message for windows
LPBITMAPINFOHEADER bmp_head_pointer;
LPVOID bmp_image_pointer;
BITMAPFILEHEADER bmp_filehead;
BITMAPINFOHEADER bmp_head;
void draw_test_image()
{
img_handle = DrawDibOpen();
file_handle = fopen("C:\\My Documents\\My programs\\ulillilliacity.bmp", "rb"); // read the source BMP file to display, binary mode
// fopen_s(file_handle, "C:\\My Documents\\My programs\\ulillilliacity.bmp", "rb"); // causes unexplained warning - 'FILE **' differs in levels of indirection from 'FILE *'
// fseek(file_handle, 2, seek_set); // skip the first two bytes, the file identifier, the string "BM"
// fill the bitmap file header struct reading from the file
fread(&bmp_filehead.bfType, 2, 1, file_handle);
fread(&bmp_filehead.bfSize, 4, 1, file_handle);
fread(&bmp_filehead.bfReserved1, 2, 1, file_handle);
fread(&bmp_filehead.bfReserved2, 2, 1, file_handle);
fread(&bmp_filehead.bfOffBits, 4, 1, file_handle);
// fill the bitmap info header struct reading from the file
fread(&bmp_head.biSize, 4, 1, file_handle); // actual file size
fread(&bmp_head.biWidth, 4, 1, file_handle);
fread(&bmp_head.biHeight, 4, 1, file_handle);
fread(&bmp_head.biPlanes, 2, 1, file_handle);
fread(&bmp_head.biBitCount, 2, 1, file_handle);
fread(&bmp_head.biCompression, 4, 1, file_handle);
fread(&bmp_head.biSizeImage, 4, 1, file_handle);
fread(&bmp_head.biXPelsPerMeter, 4, 1, file_handle);
fread(&bmp_head.biYPelsPerMeter, 4, 1, file_handle);
fread(&bmp_head.biClrUsed, 4, 1, file_handle);
fread(&bmp_head.biClrImportant, 4, 1, file_handle);
// fread(&bmp_head.biClrImportant, 4, 1, file_handle);
fread(&bmp_image, 1, bmp_head.biSizeImage, file_handle); // read the remainder of the bits, the image data part
fclose(file_handle);
DrawDibDraw(img_handle, HDC_handle, 0, 0, bmp_head.biWidth, bmp_head.biHeight, bmp_head_pointer, bmp_image_pointer, 64, 48, 512, 384, 0);
DrawDibClose(img_handle); // free the resources
ReleaseDC(hwnd, HDC_handle); // free the DC handle
}
/* Windows Procedure Event Handler */
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT paintStruct;
/* Device Context */
HDC hDC; // local HDC declaration
/* Text for display */
char string[] = "Image test - there should be an image below";
/* Switch message, condition that is met will execute */
switch(message)
{
/* Window is being created */
case WM_CREATE:
return 0;
break;
/* Window is closing */
case WM_CLOSE:
PostQuitMessage(0);
return 0;
break;
/* Window needs update */
case WM_PAINT:
hDC = BeginPaint(hwnd,&paintStruct);
/* Set txt color to sky blue */
SetTextColor(hDC, 0x00FF8040);
/* Display text in middle of window */
TextOut(hDC,0,2,string,sizeof(string)-1);
EndPaint(hwnd, &paintStruct);
return 0;
break;
default:
break;
}
return (DefWindowProc(hwnd,message,wParam,lParam));
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
bool done; // flag saying when app is complete - undeclared identifier
/* Fill out the window class structure */
windowClass.cbSize = sizeof(WNDCLASSEX);
windowClass.style = CS_HREDRAW | CS_VREDRAW;
windowClass.lpfnWndProc = WndProc;
windowClass.cbClsExtra = 0;
windowClass.cbWndExtra = 0;
windowClass.hInstance = hInstance;
windowClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
windowClass.hCursor = LoadCursor(NULL, IDC_ARROW);
windowClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
windowClass.lpszMenuName = NULL;
windowClass.lpszClassName = "MyClass";
windowClass.hIconSm = LoadIcon(NULL, IDI_WINLOGO);
/* Register window class */
if (!RegisterClassEx(&windowClass))
{
return 0;
}
/* SM_CXBORDER is 1
SM_CYBORDER is 1
SM_CXEDGE is 2
SM_CYEDGE is 2
SM_CXFIXEDFRAME is 3
SM_CYFIXEDFRAME is 3
SM_CXSIZEFRAME is 4
SM_CYSIZEFRAME is 4
SM_CYCAPTION is 18
*/
struct coord_short_xy window_border; // line #156 - missing semicolon before type? There's no missing semicolon.
struct coord_short_xy screen_size;
struct coord_short_xy window_size_base;
struct coord_short_xy window_size;
struct coord_short_xy window_pos;
window_border.x = GetSystemMetrics(SM_CXSIZEFRAME); // obtain border sizes, title bar height, and operating resolution
window_border.y = GetSystemMetrics(SM_CYSIZEFRAME);
title_bar_height = GetSystemMetrics(SM_CYCAPTION); // obtain height of the title bar
screen_size.x = GetSystemMetrics(SM_CXSCREEN); // operating resolution
screen_size.y = GetSystemMetrics(SM_CYSCREEN);
window_size_base.x = 640; // interior window size
window_size_base.y = 480;
window_size.x = window_size_base.x+window_border.x*2; // full window size, including borders and title bar
window_size.y = window_size_base.y+window_border.y*2+title_bar_height;
window_pos.x = (screen_size.x/2)-(window_size.x/2); // center the window
window_pos.y = (screen_size.y/2)-(window_size.y/2);
/* Class registerd, so now create window */
hwnd = CreateWindowEx(NULL, // extended style
"MyClass", // class name
"First Windows app", // app name
WS_OVERLAPPEDWINDOW | // window style
WS_VISIBLE |
WS_SYSMENU,
window_pos.x,window_pos.y, // x/y coords
window_size.x,window_size.y, // width,height
NULL, // handle to parent
NULL, // handle to menu
hInstance, // application instance
NULL); // no extra parameter's
/* Check if window creation failed */
if (!hwnd)
return 0;
done = false; // initialize loop condition variable
/* main message loop */
HDC_handle = GetDC(hwnd);
draw_test_image();
while(!done)
{
PeekMessage(&msg,hwnd,NULL,NULL,PM_REMOVE);
if (msg.message == WM_QUIT) // check for a quit message
{
done = true; // if found, quit app
}
else
{
/* Translate and dispatch to event queue */
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}
The build log shows this (skipping the first one as it says fopen is deprecated) - note the numerous errors saying the same thing:
Quote:
c:\my documents\my programs\first windows app\first windows app\first windows app.c(125) : error C2065: 'bool' : undeclared identifier
c:\my documents\my programs\first windows app\first windows app\first windows app.c(125) : error C2146: syntax error : missing ';' before identifier 'done'
c:\my documents\my programs\first windows app\first windows app\first windows app.c(125) : error C2065: 'done' : undeclared identifier
c:\my documents\my programs\first windows app\first windows app\first windows app.c(156) : error C2143: syntax error : missing ';' before 'type'
c:\my documents\my programs\first windows app\first windows app\first windows app.c(157) : error C2143: syntax error : missing ';' before 'type'
c:\my documents\my programs\first windows app\first windows app\first windows app.c(158) : error C2143: syntax error : missing ';' before 'type'
c:\my documents\my programs\first windows app\first windows app\first windows app.c(159) : error C2143: syntax error : missing ';' before 'type'
c:\my documents\my programs\first windows app\first windows app\first windows app.c(160) : error C2143: syntax error : missing ';' before 'type'
c:\my documents\my programs\first windows app\first windows app\first windows app.c(162) : error C2065: 'window_border' : undeclared identifier
c:\my documents\my programs\first windows app\first windows app\first windows app.c(162) : error C2224: left of '.x' must have struct/union type
c:\my documents\my programs\first windows app\first windows app\first windows app.c(163) : error C2224: left of '.y' must have struct/union type
c:\my documents\my programs\first windows app\first windows app\first windows app.c(165) : error C2065: 'screen_size' : undeclared identifier
c:\my documents\my programs\first windows app\first windows app\first windows app.c(165) : error C2224: left of '.x' must have struct/union type
c:\my documents\my programs\first windows app\first windows app\first windows app.c(166) : error C2224: left of '.y' must have struct/union type
c:\my documents\my programs\first windows app\first windows app\first windows app.c(167) : error C2065: 'window_size_base' : undeclared identifier
c:\my documents\my programs\first windows app\first windows app\first windows app.c(167) : error C2224: left of '.x' must have struct/union type
c:\my documents\my programs\first windows app\first windows app\first windows app.c(168) : error C2224: left of '.y' must have struct/union type
c:\my documents\my programs\first windows app\first windows app\first windows app.c(169) : error C2065: 'window_size' : undeclared identifier
c:\my documents\my programs\first windows app\first windows app\first windows app.c(169) : error C2224: left of '.x' must have struct/union type
c:\my documents\my programs\first windows app\first windows app\first windows app.c(169) : error C2224: left of '.x' must have struct/union type
c:\my documents\my programs\first windows app\first windows app\first windows app.c(169) : error C2224: left of '.x' must have struct/union type
c:\my documents\my programs\first windows app\first windows app\first windows app.c(170) : error C2224: left of '.y' must have struct/union type
c:\my documents\my programs\first windows app\first windows app\first windows app.c(170) : error C2224: left of '.y' must have struct/union type
c:\my documents\my programs\first windows app\first windows app\first windows app.c(170) : error C2224: left of '.y' must have struct/union type
c:\my documents\my programs\first windows app\first windows app\first windows app.c(171) : error C2065: 'window_pos' : undeclared identifier
c:\my documents\my programs\first windows app\first windows app\first windows app.c(171) : error C2224: left of '.x' must have struct/union type
c:\my documents\my programs\first windows app\first windows app\first windows app.c(171) : error C2224: left of '.x' must have struct/union type
c:\my documents\my programs\first windows app\first windows app\first windows app.c(171) : error C2224: left of '.x' must have struct/union type
c:\my documents\my programs\first windows app\first windows app\first windows app.c(172) : error C2224: left of '.y' must have struct/union type
c:\my documents\my programs\first windows app\first windows app\first windows app.c(172) : error C2224: left of '.y' must have struct/union type
c:\my documents\my programs\first windows app\first windows app\first windows app.c(172) : error C2224: left of '.y' must have struct/union type
c:\my documents\my programs\first windows app\first windows app\first windows app.c(175) : warning C4047: 'function' : 'DWORD' differs in levels of indirection from 'void *'
c:\my documents\my programs\first windows app\first windows app\first windows app.c(175) : warning C4024: 'CreateWindowExA' : different types for formal and actual parameter 1
c:\my documents\my programs\first windows app\first windows app\first windows app.c(181) : error C2224: left of '.x' must have struct/union type
c:\my documents\my programs\first windows app\first windows app\first windows app.c(181) : error C2224: left of '.y' must have struct/union type
c:\my documents\my programs\first windows app\first windows app\first windows app.c(182) : error C2224: left of '.x' must have struct/union type
c:\my documents\my programs\first windows app\first windows app\first windows app.c(182) : error C2224: left of '.y' must have struct/union type
c:\my documents\my programs\first windows app\first windows app\first windows app.c(183) : warning C4047: 'function' : 'int' differs in levels of indirection from 'void *'
c:\my documents\my programs\first windows app\first windows app\first windows app.c(183) : warning C4024: 'CreateWindowExA' : different types for formal and actual parameter 5
c:\my documents\my programs\first windows app\first windows app\first windows app.c(184) : warning C4047: 'function' : 'int' differs in levels of indirection from 'void *'
c:\my documents\my programs\first windows app\first windows app\first windows app.c(184) : warning C4024: 'CreateWindowExA' : different types for formal and actual parameter 6
c:\my documents\my programs\first windows app\first windows app\first windows app.c(185) : warning C4047: 'function' : 'int' differs in levels of indirection from 'HINSTANCE'
c:\my documents\my programs\first windows app\first windows app\first windows app.c(185) : warning C4024: 'CreateWindowExA' : different types for formal and actual parameter 7
c:\my documents\my programs\first windows app\first windows app\first windows app.c(186) : warning C4047: 'function' : 'int' differs in levels of indirection from 'void *'
c:\my documents\my programs\first windows app\first windows app\first windows app.c(186) : warning C4024: 'CreateWindowExA' : different types for formal and actual parameter 8
c:\my documents\my programs\first windows app\first windows app\first windows app.c(186) : error C2198: 'CreateWindowExA' : too few arguments for call
c:\my documents\my programs\first windows app\first windows app\first windows app.c(190) : error C2065: 'false' : undeclared identifier
c:\my documents\my programs\first windows app\first windows app\first windows app.c(199) : warning C4047: 'function' : 'UINT' differs in levels of indirection from 'void *'
c:\my documents\my programs\first windows app\first windows app\first windows app.c(199) : warning C4024: 'PeekMessageA' : different types for formal and actual parameter 3
c:\my documents\my programs\first windows app\first windows app\first windows app.c(199) : warning C4047: 'function' : 'UINT' differs in levels of indirection from 'void *'
c:\my documents\my programs\first windows app\first windows app\first windows app.c(199) : warning C4024: 'PeekMessageA' : different types for formal and actual parameter 4
c:\my documents\my programs\first windows app\first windows app\first windows app.c(202) : error C2065: 'true' : undeclared identifier
c:\my documents\my programs\first windows app\first windows app\first windows app.c(211) : warning C4244: 'return' : conversion from 'WPARAM' to 'int', possible loss of data
What is meant by "int differs in levels of indirection from 'void *'"? I'm confused about the 'void *' part (A void pointer? How can a pointer be void?) and what the statement means. There were as many as 58 errors originally but I've fixed those but the area with the boolean variable declaration and the 5 struct declarations are what's messing me up.