#include for a class I created

Posted on 2000-02-26
Medium Priority
Last Modified: 2013-11-18
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--------------------
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.

Question by:Tom Knowlton
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 2

Author Comment

by:Tom Knowlton
ID: 2561093
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


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"),
                          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)
                             (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) ;

Author Comment

by:Tom Knowlton
ID: 2561095
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  
      int a;
      virtual ~ObjectsDrawn();


#endif // !defined(AFX_OBJECTSDRAWN_H__204F6F06_EC28_11D3_B73C_9DAC4BE0123B__INCLUDED_)

Author Comment

by:Tom Knowlton
ID: 2561097
CPP for the ObjectsDrawn class

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

#include "ObjectsDrawn.h"

// Construction/Destruction




Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

LVL 86

Accepted Solution

jkr earned 400 total points
ID: 2561113
Your problem seems to be the name of the file 'MENUDEMO.C' - the compiler assumes this to be plain 'C' source and doesn't recognize C++ classes - change the name of the file to read 'MENUDEMO.CPP', this should remedy your problems.

Feel free to ask if you need more information!

Author Comment

by:Tom Knowlton
ID: 2561200
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.
LVL 86

Expert Comment

ID: 2561342
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

Author Comment

by:Tom Knowlton
ID: 2573238
Oh, okay, cool!

Thanks again for the help and the info!


Featured Post

7 Extremely Useful Linux Commands for Beginners

Just getting started with Linux? Here's a quick start guide that has 7 commands that we believe will come in handy.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction Knockoutjs (Knockout) is a JavaScript framework (Model View ViewModel or MVVM framework).   The main ideology behind Knockout is to control from JavaScript how a page looks whilst creating an engaging user experience in the least …
Styling your websites can become very complex. Here I'll show how SASS can help you better organize, maintain and reuse your CSS code.
The goal of the video will be to teach the user the difference and consequence of passing data by value vs passing data by reference in C++. An example of passing data by value as well as an example of passing data by reference will be be given. Bot…
The viewer will learn the basics of jQuery, including how to invoke it on a web page. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery.: (CODE)
Suggested Courses

777 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question