D
dharmesh Gupta
i have a multifile program namely
bpl.cpp-contains main() function
idr.h ( class definitions)
idr.cpp ( the implementation of the functions in the classes described
in idr.h)
bpl1.h ( contains declaration of a global variable)
The code from each file is pasted here,
///////////////////////////////////////////
//bpl1.h
#ifndef BPL1_H
#define BPL1_H
extern char orig_file_name[];
#endif
/////////////////////////////////////////////
//bpl.cpp
#include "idr.h"
#include <string>
#include <iostream>
#include <fstream>
#include <new>
char orig_file_name[40];
using namespace std;
int main(int argc, char *argv[])
{
char** record=NULL ;
record = new char*[26];
for(int c=0; c<26; c++)
{
record[c] = new char[20];
}
char *str;
str= new char[250];
char *str1;
str1 = new char[50];
if(argc!=2)
{
cout<<"usage:";
cout<<argv[0];
return 1;
}
ifstream in(argv[1]);
strcpy(orig_file_name,argv[1]);
if(!in)
{
cout<<"can't open input file.\n";
return 1;
}
while(in)
{
//some file reading/Writing code here
}
idrheader hdr; // declares one object of idr_header type
body ob2; //declare an object of body type
hdr.set_header(ob2); //initialize IDR Header
hdr.write_idr_header(); //write IDR Header to output file
hdr.print_body_head(); //print body head
hdr.append_body(); // append body to the output file
for(int c=0; c<26; c++)
{
delete[] record[c];
}
delete[] record; // free memory occupied by record
delete[] str; // free memory occupied by str
delete[] str1; // free memory occupied by str1
}
///////////////////////////////////////////////////////////////////////////////////////////////////
// idr.h
#ifndef IDR_H
#define IDR_H
#ifndef BODY_CLASS
#define BODY_CLASS
#include "bpl1.h"
#include <time>
#include <string>
#include <iostream>
#include <fstream>
class body
{
private:
friend class idrheader;
static float total_records;
static char FIRST_DTTM[20];
static char LAST_DTTM[20];
static long rec_key_g;
static time_t min_time;
....
....
....//various variables
public:
body();
int prepare_body(char **rec);
int write_body();
int print_body_head();
time_t body::date_parse(char*);
};
float body::total_records; //define total records
int body::rejected_records;
long body::rec_key_g;
char body::FIRST_DTTM[20];
char body::LAST_DTTM[20];
char body::str[80];
time_t body::min_time;
time_t body::max_time;
#endif
#ifndef IDRHEADER_CLASS
#define IDRHEADER_CLASS
// second class definition
class idrheader
{
private:
char IDR_VERSION;
char* SWI_ID;
float FILE_SEQ_NBR;
float TOTAL_RECS;
....
....
....//various variables
public:
idrheader();
void set_header(body b);
int write_idr_header();
int print_body_head();
int append_body();
};
#endif
#endif
///////////////////////////////////////////////////////////////////////
idr.cpp
#include "idr.h"
body::body()
{
// initialize the members
}
int body:
repare_body(char **rec)
{
// do processing on the members and prepare them for final output
}
// this function does the date parsing and format changing
time_t body::date_parse(char st[])
{
//some functioning
}
idrheader::idrheader()
{
//constructor which inititalizes the variables
}
// this is the bone of content pls look this
void idrheader::set_header(body b)
{
TOTAL_RECS=b.total_records; // The number of records counted.
Found in total_records from above.
strcpy(FIRST_DTTM,b.FIRST_DTTM); // The least call time has been
caught earlier. Normally first record.
strcpy(LAST_DTTM,b.LAST_DTTM); // The biggest call time till
now. Normally the lat record.
strcpy(ORIG_FILE_NAME,orig_file_name); // The input file name
SWI_ID="1"; // Switch ID not know. Keeping it 1. Ask
Damien/Antony
REJECTED_RECS=b.rejected_records; // Only info for the time being
DISCARDED_RECS=b.error_records; // Only info for the time being
GEN_FIELD_NAME_1= "operator name"; // These are the general fields
GEN_FIELD_NAME_2= "OP" ;
GEN_FIELD_NAME_3= "";
GEN_FIELD_NAME_4= "";
GEN_FIELD_NAME_5= "";
}
int idrheader::write_idr_header()
{
//some functioning
}
int idrheader:
rint_body_head()
{
//some functioning
}
int idrheader::append_body()
{
//some functioning
}
//////////////////////
On compiling it does not give any error, but on executing it gives
following error(and many other of similar type)
Error: Error: Unresolved external 'idrheader::write_idr_header()'
referenced from C:\BC5\BIN\DHARMESH\BPL\TEST\BPL.OBJ
Pls Help i am confused ??
bpl.cpp-contains main() function
idr.h ( class definitions)
idr.cpp ( the implementation of the functions in the classes described
in idr.h)
bpl1.h ( contains declaration of a global variable)
The code from each file is pasted here,
///////////////////////////////////////////
//bpl1.h
#ifndef BPL1_H
#define BPL1_H
extern char orig_file_name[];
#endif
/////////////////////////////////////////////
//bpl.cpp
#include "idr.h"
#include <string>
#include <iostream>
#include <fstream>
#include <new>
char orig_file_name[40];
using namespace std;
int main(int argc, char *argv[])
{
char** record=NULL ;
record = new char*[26];
for(int c=0; c<26; c++)
{
record[c] = new char[20];
}
char *str;
str= new char[250];
char *str1;
str1 = new char[50];
if(argc!=2)
{
cout<<"usage:";
cout<<argv[0];
return 1;
}
ifstream in(argv[1]);
strcpy(orig_file_name,argv[1]);
if(!in)
{
cout<<"can't open input file.\n";
return 1;
}
while(in)
{
//some file reading/Writing code here
}
idrheader hdr; // declares one object of idr_header type
body ob2; //declare an object of body type
hdr.set_header(ob2); //initialize IDR Header
hdr.write_idr_header(); //write IDR Header to output file
hdr.print_body_head(); //print body head
hdr.append_body(); // append body to the output file
for(int c=0; c<26; c++)
{
delete[] record[c];
}
delete[] record; // free memory occupied by record
delete[] str; // free memory occupied by str
delete[] str1; // free memory occupied by str1
}
///////////////////////////////////////////////////////////////////////////////////////////////////
// idr.h
#ifndef IDR_H
#define IDR_H
#ifndef BODY_CLASS
#define BODY_CLASS
#include "bpl1.h"
#include <time>
#include <string>
#include <iostream>
#include <fstream>
class body
{
private:
friend class idrheader;
static float total_records;
static char FIRST_DTTM[20];
static char LAST_DTTM[20];
static long rec_key_g;
static time_t min_time;
....
....
....//various variables
public:
body();
int prepare_body(char **rec);
int write_body();
int print_body_head();
time_t body::date_parse(char*);
};
float body::total_records; //define total records
int body::rejected_records;
long body::rec_key_g;
char body::FIRST_DTTM[20];
char body::LAST_DTTM[20];
char body::str[80];
time_t body::min_time;
time_t body::max_time;
#endif
#ifndef IDRHEADER_CLASS
#define IDRHEADER_CLASS
// second class definition
class idrheader
{
private:
char IDR_VERSION;
char* SWI_ID;
float FILE_SEQ_NBR;
float TOTAL_RECS;
....
....
....//various variables
public:
idrheader();
void set_header(body b);
int write_idr_header();
int print_body_head();
int append_body();
};
#endif
#endif
///////////////////////////////////////////////////////////////////////
idr.cpp
#include "idr.h"
body::body()
{
// initialize the members
}
int body:
{
// do processing on the members and prepare them for final output
}
// this function does the date parsing and format changing
time_t body::date_parse(char st[])
{
//some functioning
}
idrheader::idrheader()
{
//constructor which inititalizes the variables
}
// this is the bone of content pls look this
void idrheader::set_header(body b)
{
TOTAL_RECS=b.total_records; // The number of records counted.
Found in total_records from above.
strcpy(FIRST_DTTM,b.FIRST_DTTM); // The least call time has been
caught earlier. Normally first record.
strcpy(LAST_DTTM,b.LAST_DTTM); // The biggest call time till
now. Normally the lat record.
strcpy(ORIG_FILE_NAME,orig_file_name); // The input file name
SWI_ID="1"; // Switch ID not know. Keeping it 1. Ask
Damien/Antony
REJECTED_RECS=b.rejected_records; // Only info for the time being
DISCARDED_RECS=b.error_records; // Only info for the time being
GEN_FIELD_NAME_1= "operator name"; // These are the general fields
GEN_FIELD_NAME_2= "OP" ;
GEN_FIELD_NAME_3= "";
GEN_FIELD_NAME_4= "";
GEN_FIELD_NAME_5= "";
}
int idrheader::write_idr_header()
{
//some functioning
}
int idrheader:
{
//some functioning
}
int idrheader::append_body()
{
//some functioning
}
//////////////////////
On compiling it does not give any error, but on executing it gives
following error(and many other of similar type)
Error: Error: Unresolved external 'idrheader::write_idr_header()'
referenced from C:\BC5\BIN\DHARMESH\BPL\TEST\BPL.OBJ
Pls Help i am confused ??