Solved

Unseccessful Header file (.h) creation, what's wrong?

Posted on 1998-12-27
4
199 Views
Last Modified: 2010-04-02
I wrote a Program (pro87.c), it works fine.  Then I separated it into two files as a Header (pro86.h) and a Program (pro86.c).  It turned error during making.  Compiler  said "Linker Error: Undifined symbol _main in module c0.ASM.   What's wrong.  It's exactly the same except as two files.

Here is as a single file.  It's O.K.
/*PROGRAM pro87.c */
/* DataBase type determination */
#include<stdio.h>
#include<string.h>
#define UNKNOWN      1   //"Unknown"   /* Data format type */
#define GENBANK 2   //"GenBank"
#define EMBL      3   //"EMBL"
#define PIR            4   //"PIR"
#define PRF            5   //"PRF"
#define SEQDATA 6   //"SeqData"
#define BUFLEN  256   /* maximum length of buffer for string */

char linebuf[BUFLEN];

main(int argc, char *argv[])
{
   int dataType;
   FILE *fp;
   if(argc!=2)
        printf("Usage : pro86 filename\n");
   else
        fp=fopen(argv[1], "r");

   dataType=0;
   while(fgets(linebuf, BUFLEN, fp)!=NULL)
   {
       if (strncmp(linebuf, "LOCUS", 5)==0){
            dataType = GENBANK;      break;
       }else if (strncmp(linebuf, "ID ", 3)==0){
            dataType = EMBL; break;
       }else if (strncmp(linebuf, "ENTRY", 5)==0){
            dataType = PIR;      break;
       }else if (strncmp(linebuf, "CODE", 4)==0){
            dataType = PRF; break;
       }else if (linebuf[0] == '>'){
            dataType = SEQDATA; break;
       }else
            dataType = UNKNOWN;
   }

   if(dataType==1)
        printf("Unknown\n");
   if(dataType==2)
        printf("GenBank\n");
   if(dataType==3)
        printf("EMBL\n");
   if(dataType==4)
        printf("PIR\n");
   if(dataType==5)
        printf("PRF\n");
   if(dataType==6)
        printf("SeqData\n");
   fclose(fp);
   return 0;
}

_______________________________________________________
The above is OK, now separate it to two files.

/* pro86.H  ;   This is a header file. */
/* Data format type */
#define UNKNOWN      1   //"Unknown"
#define GENBANK 2   //"GenBank"
#define EMBL      3   //"EMBL"
#define PIR            4   //"PIR"
#define PRF            5   //"PRF"
#define SEQDATA 6   //"SeqData"
_______________________________________
AND
/* PROGRAM Pro86.c */
/* DataBase type determination */
#include<stdio.h>
#include<string.h>
#include<pro86.h>
#define BUFLEN  256   /* maximum length of buffer*/

char linebuf[BUFLEN];

main(int argc, char *argv[])
{
   int dataType;
   FILE *fp;
   if(argc!=2)
        printf("Usage : pro86 filename\n");
   else
        fp=fopen(argv[1], "r");

   dataType=0;
   while(fgets(linebuf, BUFLEN, fp)!=NULL)
   {
       if (strncmp(linebuf, "LOCUS", 5)==0){
            dataType = GENBANK;      break;
       }else if (strncmp(linebuf, "ID ", 3)==0){
            dataType = EMBL; break;
       }else if (strncmp(linebuf, "ENTRY", 5)==0){
            dataType = PIR;      break;
       }else if (strncmp(linebuf, "CODE", 4)==0){
            dataType = PRF; break;
       }else if (linebuf[0] == '>'){
            dataType = SEQDATA; break;
       }else
            dataType = UNKNOWN;
   }

   if(dataType==1)
        printf("Unknown\n");
   if(dataType==2)
        printf("GenBank\n");
   if(dataType==3)
        printf("EMBL\n");
   if(dataType==4)
        printf("PIR\n");
   if(dataType==5)
        printf("PRF\n");
   if(dataType==6)
        printf("SeqData\n");
   fclose(fp);
   return 0;
}
__________________________________________
These don't compile.  Linker Error!!  Help me.




0
Comment
Question by:mkido
  • 2
4 Comments
 
LVL 6

Expert Comment

by:thresher_shark
ID: 1181084
I betcha this:

#include<pro86.h>

should be

#include "pro86.h"
0
 
LVL 6

Expert Comment

by:thresher_shark
ID: 1181085
Other than that, it looks fine.  I am not sure why it would be saying main is undefined...
0
 
LVL 1

Accepted Solution

by:
issamwd earned 50 total points
ID: 1181086
your problem is Simple

I faced the same problem years ago & the same error was appearing & it drived me mad.

The solution is:

this technique you are using is called separating interface from implementation & this is done by including
the .c or .cpp file in a project that is a must.
then try to compile now.

try that with out adding the header file

thanks

0
 

Author Comment

by:mkido
ID: 1181087
Thank you, all.
I got compilation by deleting header file from the project.
Thanks.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Article by: SunnyDark
This article's goal is to present you with an easy to use XML wrapper for C++ and also present some interesting techniques that you might use with MS C++. The reason I built this class is to ease the pain of using XML files with C++, since there is…
Often, when implementing a feature, you won't know how certain events should be handled at the point where they occur and you'd rather defer to the user of your function or class. For example, a XML parser will extract a tag from the source code, wh…
The goal of the tutorial is to teach the user how to use functions in C++. The video will cover how to define functions, how to call functions and how to create functions prototypes. Microsoft Visual C++ 2010 Express will be used as a text editor an…
The viewer will learn how to clear a vector as well as how to detect empty vectors in C++.

910 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now