Tom Knowlton
asked on
#include for a class I created
I am creating a simple drawing program in Visual C++. The program is a garden variety Win32 type program (no MFC).
I have a custom made class I am trying to include in the main source code.
I am getting lots of errors that don't make sense to me:
--------------------Config uration: MenuDemo - Win32 Debug--------------------
Compiling...
MenuDemo.c
c:\windows\desktop\csis 3330\program 3\objectsdrawn.h(12) : error C2061: syntax error : identifier 'ObjectsDrawn'
c:\windows\desktop\csis 3330\program 3\objectsdrawn.h(12) : error C2059: syntax error : ';'
c:\windows\desktop\csis 3330\program 3\objectsdrawn.h(13) : error C2449: found '{' at file scope (missing function header?)
c:\windows\desktop\csis 3330\program 3\objectsdrawn.h(20) : error C2059: syntax error : '}'
c:\windows\desktop\csis 3330\program 3\menudemo.c(27) : error C2065: 'WndProc' : undeclared identifier
c:\windows\desktop\csis 3330\program 3\menudemo.c(27) : warning C4047: '=' : 'long (__stdcall *)(struct HWND__ *,unsigned int ,unsigned int ,long )' differs in levels of indirection from 'int '
c:\windows\desktop\csis 3330\program 3\menudemo.c(62) : error C2373: 'WndProc' : redefinition; different type modifiers
Error executing cl.exe.
MenuDemo.exe - 6 error(s), 1 warning(s)
I will paste the source code for the main program and the class separately.
Thanks!
I have a custom made class I am trying to include in the main source code.
I am getting lots of errors that don't make sense to me:
--------------------Config
Compiling...
MenuDemo.c
c:\windows\desktop\csis 3330\program 3\objectsdrawn.h(12) : error C2061: syntax error : identifier 'ObjectsDrawn'
c:\windows\desktop\csis 3330\program 3\objectsdrawn.h(12) : error C2059: syntax error : ';'
c:\windows\desktop\csis 3330\program 3\objectsdrawn.h(13) : error C2449: found '{' at file scope (missing function header?)
c:\windows\desktop\csis 3330\program 3\objectsdrawn.h(20) : error C2059: syntax error : '}'
c:\windows\desktop\csis 3330\program 3\menudemo.c(27) : error C2065: 'WndProc' : undeclared identifier
c:\windows\desktop\csis 3330\program 3\menudemo.c(27) : warning C4047: '=' : 'long (__stdcall *)(struct HWND__ *,unsigned int ,unsigned int ,long )' differs in levels of indirection from 'int '
c:\windows\desktop\csis 3330\program 3\menudemo.c(62) : error C2373: 'WndProc' : redefinition; different type modifiers
Error executing cl.exe.
MenuDemo.exe - 6 error(s), 1 warning(s)
I will paste the source code for the main program and the class separately.
Thanks!
ASKER
H file for the OjbectsDrawn class
// ObjectsDrawn.h: interface for the ObjectsDrawn class.
//
////////////////////////// ////////// ////////// ////////// ////////// ////
#if !defined(AFX_OBJECTSDRAWN_ H__204F6F0 6_EC28_11D 3_B73C_9DA C4BE0123B_ _INCLUDED_ )
#define AFX_OBJECTSDRAWN_H__204F6F 06_EC28_11 D3_B73C_9D AC4BE0123B __INCLUDED _
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class ObjectsDrawn
{
private:
int a;
public:
ObjectsDrawn();
virtual ~ObjectsDrawn();
};
#endif // !defined(AFX_OBJECTSDRAWN_ H__204F6F0 6_EC28_11D 3_B73C_9DA C4BE0123B_ _INCLUDED_ )
// ObjectsDrawn.h: interface for the ObjectsDrawn class.
//
//////////////////////////
#if !defined(AFX_OBJECTSDRAWN_
#define AFX_OBJECTSDRAWN_H__204F6F
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class ObjectsDrawn
{
private:
int a;
public:
ObjectsDrawn();
virtual ~ObjectsDrawn();
};
#endif // !defined(AFX_OBJECTSDRAWN_
ASKER
CPP for the ObjectsDrawn class
// ObjectsDrawn.cpp: implementation of the ObjectsDrawn class.
//
////////////////////////// ////////// ////////// ////////// ////////// ////
#include "ObjectsDrawn.h"
////////////////////////// ////////// ////////// ////////// ////////// ////
// Construction/Destruction
////////////////////////// ////////// ////////// ////////// ////////// ////
ObjectsDrawn::ObjectsDrawn ()
{
}
ObjectsDrawn::~ObjectsDraw n()
{
}
// ObjectsDrawn.cpp: implementation of the ObjectsDrawn class.
//
//////////////////////////
#include "ObjectsDrawn.h"
//////////////////////////
// Construction/Destruction
//////////////////////////
ObjectsDrawn::ObjectsDrawn
{
}
ObjectsDrawn::~ObjectsDraw
{
}
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
This did the trick! Thank you so much!
Why doesn't VC just default the file extension to .cpp???? Wouldn't that be easier? Then both C and C++ source code would be handled.
Why doesn't VC just default the file extension to .cpp???? Wouldn't that be easier? Then both C and C++ source code would be handled.
It's a cenvention files with the .c extension are treated as plain 'C' (by every C++ compiler)
BTW: VC defaults the extension to .cpp when saving a newly created file - but as you apparently took the sample 'as is', you ran into trouble... there's however a workaround when the problem is 'the other way round' - code can be guarded by using
#ifdef __cplusplus
// C++ specific code here
#endif
BTW: VC defaults the extension to .cpp when saving a newly created file - but as you apparently took the sample 'as is', you ran into trouble... there's however a workaround when the problem is 'the other way round' - code can be guarded by using
#ifdef __cplusplus
// C++ specific code here
#endif
ASKER
Oh, okay, cool!
Thanks again for the help and the info!
Tom
Thanks again for the help and the info!
Tom
ASKER
/*------------------------
MENUDEMO.C -- Menu Demonstration
(c) Charles Petzold, 1998
--------------------------
#include <windows.h>
#include "resource.h"
#include "ObjectsDrawn.h"
#define ID_TIMER 1
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
TCHAR szAppName[] = TEXT ("MenuDemo") ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = szAppName ;
wndclass.lpszClassName = szAppName ;
if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow (szAppName, TEXT ("Menu Demonstration"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL) ;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static int idColor [5] = { WHITE_BRUSH, LTGRAY_BRUSH, GRAY_BRUSH,
DKGRAY_BRUSH, BLACK_BRUSH } ;
static int iSelection = IDM_BKGND_WHITE ;
HMENU hMenu ;
switch (message)
{
case WM_COMMAND:
hMenu = GetMenu (hwnd) ;
switch (LOWORD (wParam))
{
case IDM_CLEAR:
//MessageBox (hwnd, TEXT ("Clear function not yet implemented!"),
// szAppName, MB_ICONEXCLAMATION | MB_OK) ;
return 0 ;
case IDM_APP_EXIT:
SendMessage (hwnd, WM_CLOSE, 0, 0) ;
return 0 ;
case IDM_EDIT_UNDO:
case IDM_EDIT_CUT:
case IDM_EDIT_COPY:
case IDM_EDIT_PASTE:
case IDM_EDIT_CLEAR:
MessageBeep (0) ;
return 0 ;
case IDM_BKGND_WHITE: // Note: Logic below
case IDM_BKGND_LTGRAY: // assumes that IDM_WHITE
case IDM_BKGND_GRAY: // through IDM_BLACK are
case IDM_BKGND_DKGRAY: // consecutive numbers in
case IDM_BKGND_BLACK: // the order shown here.
CheckMenuItem (hMenu, iSelection, MF_UNCHECKED) ;
iSelection = LOWORD (wParam) ;
CheckMenuItem (hMenu, iSelection, MF_CHECKED) ;
SetClassLong (hwnd, GCL_HBRBACKGROUND, (LONG)
GetStockObject
(idColor [LOWORD (wParam) - IDM_BKGND_WHITE])) ;
InvalidateRect (hwnd, NULL, TRUE) ;
return 0 ;
case IDM_TIMER_START:
if (SetTimer (hwnd, ID_TIMER, 1000, NULL))
{
EnableMenuItem (hMenu, IDM_TIMER_START, MF_GRAYED) ;
EnableMenuItem (hMenu, IDM_TIMER_STOP, MF_ENABLED) ;
}
return 0 ;
case IDM_TIMER_STOP:
KillTimer (hwnd, ID_TIMER) ;
EnableMenuItem (hMenu, IDM_TIMER_START, MF_ENABLED) ;
EnableMenuItem (hMenu, IDM_TIMER_STOP, MF_GRAYED) ;
return 0 ;
case IDM_APP_HELP:
MessageBox (hwnd, TEXT ("Help not yet implemented!"),
szAppName, MB_ICONEXCLAMATION | MB_OK) ;
return 0 ;
case IDM_APP_ABOUT:
MessageBox (hwnd, TEXT ("Menu Demonstration Program\n")
TEXT ("(c) Charles Petzold, 1998"),
szAppName, MB_ICONINFORMATION | MB_OK) ;
return 0 ;
}
break ;
case WM_TIMER:
MessageBeep (0) ;
return 0 ;
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}