CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 3 of 3
  1. #1
    Join Date
    Dec 2013
    Posts
    14

    [RESOLVED] error C2143 & error C2433

    Hi all,

    I am running a cpp file that uses the file DATECL.H below but I receive the following error messages :

    \Test\datecl.h(221): error C2143: syntax error : missing ';' before '&'
    \Test\datecl.h(221): error C2433: 'ostream' : 'friend' not permitted on data declarations
    \Test\datecl.h(221): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    \Test\datecl.h(221): error C2061: syntax error : identifier 'ostream'
    \Test\datecl.h(221): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    \Test\datecl.h(221): error C2805: binary 'operator <<' has too few parameters
    \Test\datecl.h(221): error C2333: 'Date:perator <<' : error in function declaration; skipping function body
    \Test\datecl.h(224): error C2143: syntax error : missing ';' before '&'
    \Test\datecl.h(224): error C2433: 'ostream' : 'friend' not permitted on data declarations
    \Test\datecl.h(224): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    \Test\datecl.h(224): error C2061: syntax error : identifier 'ostream'
    \Test\datecl.h(224): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    \Test\datecl.h(185): error C2065: 'cout' : undeclared identifier
    \Test\datecl.h(185): error C2065: 'endl' : undeclared identifier
    1> Generating Code...
    1>
    1>Build FAILED.
    1>
    1>Time Elapsed 00:00:03.17
    Thanks in advance for your help.

    Code:
    /*
    *+----------------------------------------------------------------------
    *| Header.......: DATECL.H
    *| Date.........: Sat  12-01-1994
    *| Author.......: James M. Curran,  et al
    *| Version......: 5.0   Compile w/MSC++ 7.0 or Borland C++ 3.1 (or later versions)
    *| Usage........: General purpose date conversion, arithmetic,
    *|              :    comparison, and formatting class
    *| Compile line.: cl /AM /W3 /Zp /D_DOS /Osel /Gs /c datecl4.cpp
    *|              : cl /AM /W3 /Zp /D_DOS /Osel /Gs /c datedemo.cpp
    *| Link line....:
    *|    link /NOD /ONERROR:NOEXE datedemo date, datedemo, NUL, mafxcr mlibce;
    *|
    *| Acknowledgements:
    *|
    *|    Originally inspired by Steve Marcus (CIS 72007,1233)  6/16/91
    *|    Enhanced by Eric Simon (CIS 70540,1522)               6/29/91
    *|    Further Enhanced by Chris Hill (CIS 72030,2606)       7/11/91
    *|    Still Further Enhanced by Hill & Simon  v3.10         8/05/91
    *|
    *|    "It jist keeps on a 'git 'n bedder!"
    *|       by Charles D. Price (CIS 70541,3651) v4.0          6/27/92
    *|
    *|     Sealing the memory leaks...
    *|         some variable casts and string output.
    *|             by Kenneth A. Argo (CIS 71241,3635) v4.1        3/10/93
    *|
    *|     "Yet, more improvements..."
    *|             by Ly Minh TrĀ” (CIS 73062,512)  v4.2            3/13/93
    *|             ............................... v4.3            3/24/93
    *|             ............................... v4.4            6/03/93
    *|             ............................... v4.5            6/21/93
    *|             ............................... v4.6            8/04/93
    *|             ............................... v4.7            9/20/93
    *|             ............................... v4.8           11/18/93
    *|             ............................... v4.9            1/26/94
    *|
    *|      "All kinds of good stuff..."
    *|			   by James M. Curran (CIS 72261,655)  v5.0 	  10/30/94
    *|
    *|
    *|    And the quest for the perfect date class continues....
    *|
    *+----------------------------------------------------------------------
    */
    #ifndef __cplusplus
    #error  Requires C++ Compiler
    #endif
    
    #ifndef DATECLS_H
    #define DATECLS_H
    
    //---------------------- Compatibility Section -----------------------------------------
    //
    // Here we attempt to smooth out all the variations between different compiliers, by 
    // #define-ing several symbols to include or remove, or to use a common name.
    //
    // The #defines used are :
    //
    // #define MSDOS		// If target system is MS-DOS based.
    // #define DOSDATE_T	// name of the dos_date struct, (need only when "MSDOS" is defined)
    // #define NOPOSTFIX	// If compiler cannot handle postfix ++.
    // #define f_EXISTS // if a boolean type of one form or another already exists.
    //
    
    
    #if !defined(BOOLEAN_EXISTS)
    	// this simulates (poorly) the new "bool" basic type as defined in the
    	// ANSI/ISO C++ committee working papers, where "bool", "true" and "false"
    	// are new keywords.   When the standard is finalized, this entire #if/#endif 
    	// can be deleted.
    	//typedef enum __booltag {false, true} bool;
    #endif
    
    
    #if defined(__MSDOS__)	// Borland uses "__MSDOS__" while Microsoft uses
    	#define	MSDOS	TRUE	// "MSDOS".  I'm not sure what WATCOM, et al use, 
    #endif						// but I figure this should cover most of 'em.
    
    
    
    #if defined (__BORLANDC__)  || defined (__TURBOC__)
    		#define	DOSDATE_T	dosdate_t
    		#include <iostream.h>
    #elif defined(_MSC_VER) 
    		#if defined(_WIN32)
    		typedef struct _dosdate_t
    			{							// Current date structure
    			unsigned char day;			// Day of the month: 1-31
    			unsigned char month;		// Month of the year: 1-12
    			unsigned int year;			// Year: 0-119 relative to 1980
    			unsigned char dayofweek;	// Day of the week: 0-6 (Sunday is 0)
    			} _dosdate_t;
    		#endif
    		#define DOSDATE_T   _dosdate_t
    		#include <iostream>
    
    #elif defined (__ZTC__)  && __ZTC__ < 0x0600
    
    		#define	DOSDATE_T	dos_date_t
    		#define	MSDOS			TRUE
    		#define NOPOSTFIX
    		#include <stream.hpp>
    
    #elif defined (__ZTC__) || defined(__SC__)
    
    		#define	DOSDATE_T	dos_date_t
    		#define	MSDOS			TRUE
    		#include <iostream.h>
    
    #elif	defined (___WATCOMC__)
    		#error Add #defines for Watcom C
    		#define	NON_MSDOS	TRUE			// Until #defines are added.
    
    #else		// Add other compilers here
    
    		#define	NON_MSDOS	TRUE
    		#include <iostream.h>
    
    #endif
    
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <time.h>
    
    #if defined(MSDOS)
    	#include <dos.h>
    #endif
    #if defined(_WIN32)
    	#include <windows.h>
    #endif
    
    #define PUBLIC           // just a couple of friendly reminders!
    #define MEMBER
    
    #define ABBR_LENGTH 3
    
    
    class Date
    {
    	public:
            //
            // TML - Put into class so we don't proliferate global names...in the
            //       tradition of the 'ios' class!
            //       Make use of the encapsulation feature of C++
            //
    		const enum format_type {MDY, DAY, MONTH, FULL, EUROPEAN, COLLATE};
            const enum {OFF, ON};
            const enum {BUF_SIZE=40};
            const enum Actions { NO_CENTURY  = 0x02,
                         		 DATE_ABBR   = 0x04};
    		const enum Wday 	{NON_DAY=0, SUNDAY=1,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY};                     
    		const enum Months   {NON_MONTH=0, JANUARY=1, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST,
    								SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER};
    	//protected:
    		unsigned long julian;	// see julDate();  days since 1/1/4713 B.C.
    		short 	year;			// see NYear4()
    		short	month;			// see NMonth()
    		short 	day;			// see Day()
    		char 	day_of_week;	// see NDOW();	1 = Sunday, ... 7 = Saturday
    		char	separator;
    
    	private:
    		static			int		DisplayFormat;
    		static unsigned int		DisplayOptions;
    		static unsigned short	DefaultCentury;
    		static unsigned int 		startDST;
    		static unsigned int 		startSTD;
    
    
    		void julian_to_mdy ();         // convert julian day to mdy
    		void julian_to_wday ();        // convert julian day to day_of_week
    		void mdy_to_julian ();         // convert mdy to julian day
    
    	public:
    		Date ();
    		Date (short m, short d, short y);
    		Date (long 	j);
    		Date (const char 	*dat);
    		Date (const Date 	&dt);
    		Date (const tm	 	&TM);
    		Date (int weeknum, int dow, short m, short y);
    		inline void writeDate(Date d) { cout << d << endl; }
    #if defined (MSDOS) || defined(_WIN32)
    		Date (const DOSDATE_T &ds);
    #endif
    
            virtual ~Date() {}              // Do nothing!
    
            operator const char *( void ) const;        // Date to character - via type casting
    
    		inline Date Date::operator + (long i)	const	{return Date(julian + i);};
    		inline Date Date::operator + (int i)	const	{return Date(julian + (long)i);};
    		inline Date Date::operator - (long i)	const 	{return Date(julian - i);};
    		inline Date Date::operator - (int i)	const	{return Date(julian - (long)i);};
    		inline long Date::operator - (const Date &dt)	const	{return ( julian - dt.julian );};
    
            Date &operator += (long i);
            Date &operator -= (long i);
    
            Date  operator ++ ();               // Prefix increment
            Date  operator -- ();               // Prefix decrement
    
    #if !defined(NOPOSTFIX)
            Date  operator ++ (int);            // Postfix increment
            Date  operator -- (int);            // Postfix decrement
    #endif
    		inline int operator <  (const Date &dt) const {return(julian <  dt.julian);};
    		inline int operator <= (const Date &dt) const {return(julian <= dt.julian);};
    		inline int operator >  (const Date &dt) const {return(julian >  dt.julian);};
    		inline int operator >= (const Date &dt) const {return(julian >= dt.julian);};
    		inline int operator == (const Date &dt) const {return(julian == dt.julian);};
    		inline int operator != (const Date &dt) const {return(julian != dt.julian);};
    
    		inline 	static void  	setFormat (enum format_type format)	{DisplayFormat = format;};
    				static bool		setOption (int option, int action=ON);
    				static int   	setCentury(short century);
    
    		friend ostream &operator << (ostream &os, enum format_type ft) {Date::setFormat(ft); return(os);};
    
    #if defined(MSDOS) || defined(_WIN32)
    		friend ostream &operator << (ostream &os, const DOSDATE_T &dt);
    #endif
    
    		char *formatDate(int type=DisplayFormat) const;
    
    inline long	julDate()		const	{return(julian);};	// returns julian date
    		int	DOY()			const;						// returns relative date since Jan. 1
    
    		int		isLeapYear()	const;		// returns true if leap year, false if not
    		bool 	isDST()			const;		// returns true if date is within Daylight
                                       			// Savings Time (DST), false if not
    
            // Sets the month and day which DST and STD date begins!  This will
            // enable isDST() to return the correct result for regions other than
            // North America.  Returns true if month and day values are valid, false
            // otherwise - TML
    
    		static bool	setDST(unsigned nMonth, unsigned nDay);
    		static bool	setSTD(unsigned nMonth, unsigned nDay);
    
    
    #if defined (MSDOS) || defined(_WIN32)
    		// note that the next functions return a date struct as defined in
    		// dos.h (distinct from the Date class)
    		DOSDATE_T	eom()		const;  // returns last day of month in object
    		DOSDATE_T	getDate()	const;  // returns a date structure
    
    #endif
    		//-------------------------------------------------
    		// Version 4.0 Extension to Public Interface - CDP
    		//-------------------------------------------------
    
    		// These 'Set's modify the date object and actually SET it.
    		// They all return a reference to self (*this)
    
    			Date &Set(void);       // Sets to current system date
    			Date &Set(long lJulian);
    			Date &Set(unsigned int nMonth, unsigned int nDay, unsigned int nYear);
    			Date &Set(int weeknum, int dow, short m, short y);
    			Date &AddMonths(int nCount = 1); // May also pass neg# to decrement
    
    			Date &AddWeeks(int nCount = 1);	//
    			Date &AddYears(int nCount = 1);	//
    
    			unsigned int DaysInMonth(void) const ;	// Number of days in month (1..31)
    
    			int	WOM(void) 		const;	// Numeric Week Of Month  (1..6)
    			int	WOY(void) 		const;	// Numeric Week Of Year  (1..52)
    
    										// First Day Of Month	(1..7)
    	inline	int	FirstDOM(void)	const	{return Date(month, 1, year).NDOW();}
    
    										// Numeric Day of date object
    	inline	int Day(void)		const	{return day;}
    
    										//	Day Of Week
    										// Character ('Sunday'..'Saturday')
    	inline	const char * CDOW(void)	const	{return(formatDate(DAY));}
    										// (1..7)
    	inline	int	NDOW(void)	const	{return day_of_week;}
    
    									// eg. 1992
    	inline	int NYear4()	const	{return year;}
    
    									// Month Number (1..12)
    	inline	int NMonth()	const	{return month;}
    
    									// First Date Of Month
    	inline	Date BOM()		const 	{return(Date(month, 1, year));}
    
    									// Last Date Of Month
    	inline	Date EOM()		const 	{return((Date(month, 1, year).AddMonths(1))-1);}
    
    									// First Date Of Year
    	inline	Date BOY()		const	{return(Date(1, 1, year));}
    
    									// Last Date Of Year
    	inline	Date EOY()		const	{return(Date(1, 1, year+1)-1);}
    
    									// Character Month name
    	inline	const char * CMonth() const	{return(formatDate(MONTH));}
    
    #ifndef NO_HOLIDAYS
    	inline  static Date	NewYearsDay(short year)	{return(Date(JANUARY, 1, year));}
    	inline  static Date	ValentinesDay(short year)	{return(Date(FEBRUARY, 14, year));}
    	inline  static Date	PresidentsDay(short year)	{return(Date(3, MONDAY, FEBRUARY, year));}
    	inline  static Date	StPatricksDay(short year)	{return(Date(MARCH, 17, year));}
    	inline  static Date	MothersDay(short year)	{return(Date(2, SUNDAY, MAY, year));}
    	inline  static Date	MemorialDay(short year)	{return(Date(0, MONDAY, MAY, year));}
    	inline  static Date	FlagDay(short year)		{return(Date(JUNE, 14, year));}
    	inline  static Date	FathersDay(short year)	{return(Date(3, SUNDAY, JUNE, year));}
    	inline  static Date	CanadaDay(short year)		{return(Date(JULY, 1, year));}
    	inline  static Date	IndependenceDay(short year)	{return(Date(JULY, 4, year));}
    	inline  static Date	BastilleDay(short year)	{return(Date(JULY, 14, year));}
    	inline  static Date	LaborDay(short year)		{return(Date(1, MONDAY, SEPTEMBER, year));}
    	inline  static Date	VeteransDay(short year)	{return(Date(NOVEMBER, 11, year));}
    	inline  static Date	ThanksgivingDay(short year)	{return(Date(4, THURSDAY, NOVEMBER, year));}
    	inline  static Date	ChristmasDay(short year)	{return(Date(DECEMBER, 25, year));}
    #endif	// NO_HOLIDAYS
    
    };
    
    #endif

  2. #2
    2kaud's Avatar
    2kaud is offline Super Moderator Power Poster
    Join Date
    Dec 2012
    Location
    England
    Posts
    7,822

    Re: error C2143 & error C2433

    The problem is that datecl.h uses ostream, cout and endl from <iostream> which are now in the std namespace. Two possible solutions are:

    1) Edit datecl.h to put std:: before ostream, cout and endl.
    2) Before including datecl.h have using namespace std. If you are not including any other STL headers, then you will need to include one in order for the using to work (otherwise it complains about std namespace not existing!).

    Try this
    Code:
    #include <string>
    using namespace std;
    
    #include "datecl.h"
    This compiles ok with my MSVC.
    Last edited by 2kaud; March 11th, 2014 at 05:48 PM.
    All advice is offered in good faith only. All my code is tested (unless stated explicitly otherwise) with the latest version of Microsoft Visual Studio (using the supported features of the latest standard) and is offered as examples only - not as production quality. I cannot offer advice regarding any other c/c++ compiler/IDE or incompatibilities with VS. You are ultimately responsible for the effects of your programs and the integrity of the machines they run on. Anything I post, code snippets, advice, etc is licensed as Public Domain https://creativecommons.org/publicdomain/zero/1.0/ and can be used without reference or acknowledgement. Also note that I only provide advice and guidance via the forums - and not via private messages!

    C++23 Compiler: Microsoft VS2022 (17.6.5)

  3. #3
    Join Date
    Dec 2013
    Posts
    14

    Re: error C2143 & error C2433

    Thanks, this work fine for me (I have used using namespace std; everywhere instead).

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured