Confusion over header files

Discussion in 'C++' started by dharmesh Gupta, Aug 11, 2003.

  1. 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 ??
     
    dharmesh Gupta, Aug 11, 2003
    #1
    1. Advertising

  2. > 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
     
    Nicolai Hansen, Aug 11, 2003
    #2
    1. Advertising

  3. (Nicolai Hansen) wrote in message news:<>...
    > > 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


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

    Thanks,
    Dharmesh
     
    dharmesh Gupta, Aug 13, 2003
    #3
  4. "John Harrison" <> wrote in message news:<bh80qs$undt6$-berlin.de>...
    > "dharmesh Gupta" <> wrote in message
    > news:...
    > > 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

    > Also remove the definitions of the static member variables in class body
    > from idr.h and put them in idr.cpp, e.g.
    >
    > // this should go in idr.cpp
    > float body::total_records; //define total records
    >
    > If you can't get it to work then I would suggest putting *everything* in one
    > cpp file and one header file, then try moving *one* thing into another cpp
    > file, and see if you can get that to work. Then try one more thing into
    > another cpp file. Keep going like that until you are confident you
    > understand what you are doing.
    >
    > john
     
    dharmesh Gupta, Aug 13, 2003
    #4
  5. dharmesh Gupta

    Noah Roberts Guest


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


    I would use a text editor if I where you.

    If you don't know how a makefile works this is an excelent time to do a
    web search and learn. You can start by reading
    http://www.elitecoders.de/mags/cscene/CS2/CS2-10.html

    NR
     
    Noah Roberts, Aug 13, 2003
    #5
  6. (dharmesh Gupta) wrote in message news:<>...
    > (Nicolai Hansen) wrote in message news:<>...
    > > > 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?
    > >

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

    > > /Nic
    > > Thanks,

    > Dharmesh
     
    dharmesh Gupta, Aug 14, 2003
    #6
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Eternally
    Replies:
    7
    Views:
    411
  2. Roman Töngi
    Replies:
    8
    Views:
    562
    Larry I Smith
    May 7, 2005
  3. John Smith

    Header files included in header files

    John Smith, Jul 21, 2004, in forum: C Programming
    Replies:
    18
    Views:
    608
    Jack Klein
    Jul 24, 2004
  4. Replies:
    3
    Views:
    1,307
    Walter Roberson
    May 1, 2006
  5. mlt
    Replies:
    2
    Views:
    845
    Jean-Marc Bourguet
    Jan 31, 2009
Loading...

Share This Page