-
March 11th, 2014, 05:05 PM
#1
[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
-
March 11th, 2014, 05:40 PM
#2
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)
-
March 11th, 2014, 06:12 PM
#3
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
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|