Link to home
Start Free TrialLog in
Avatar of Tom Knowlton
Tom KnowltonFlag for United States of America

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:

--------------------Configuration: 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!
Avatar of Tom Knowlton
Tom Knowlton
Flag of United States of America image

ASKER

Source code for MAIN program.  When I comment out the "#include "ObjectsDrawn.h" the program compiles just fine.



/*-----------------------------------------
   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) ;
}
H file for the OjbectsDrawn class

// ObjectsDrawn.h: interface for the ObjectsDrawn class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_OBJECTSDRAWN_H__204F6F06_EC28_11D3_B73C_9DAC4BE0123B__INCLUDED_)
#define AFX_OBJECTSDRAWN_H__204F6F06_EC28_11D3_B73C_9DAC4BE0123B__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__204F6F06_EC28_11D3_B73C_9DAC4BE0123B__INCLUDED_)
CPP for the ObjectsDrawn class

// ObjectsDrawn.cpp: implementation of the ObjectsDrawn class.
//
//////////////////////////////////////////////////////////////////////

#include "ObjectsDrawn.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

ObjectsDrawn::ObjectsDrawn()
{

}

ObjectsDrawn::~ObjectsDrawn()
{

}
ASKER CERTIFIED SOLUTION
Avatar of jkr
jkr
Flag of Germany image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
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.
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
Oh, okay, cool!

Thanks again for the help and the info!

Tom