Confusion over header files

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::prepare_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::print_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 ??
 
N

Nicolai Hansen

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)

*snip code*
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 ??

Stupid question: is the idr.cpp file added to your makefile/projectfile?

/Nic
 
D

dharmesh Gupta

*snip code*


Stupid question: is the idr.cpp file added to your makefile/projectfile?

/Nic

Thanks for ur reply but i am new to g++ pls help how should i add
idr.cpp in my makefile ??

Thanks,
Dharmesh
 
D

dharmesh Gupta

John Harrison said:
dharmesh Gupta said:
i have a multifile program namely

[snip]

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 ??

At a guess I would say that you forgot to compile the idr.cpp file.
Unfortunately this is not the place to help you operate your compiler, but
somehow or other you must tell you compiler that you want to compile the
idr.cpp file.
i got the mistake. I am using Boreland 5.02 compiler. I think the
compiler is not able to link idr.cpp to the ultimate code, since i am
new to this compiler pls help how should i include this file.

Thanks,
Dharmesh
 
D

dharmesh Gupta

i have compiled it using the comand g++ bpl.cpp idr.cpp -o bpl
and run it ./bpl successfully. is this the right way to do it ??
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,768
Messages
2,569,574
Members
45,048
Latest member
verona

Latest Threads

Top