2013-08-18 3 views
1

Я Заголовочный файл:Inluding функции в файле заголовка

dictionary.h:

#ifndef dictionary_h__ 
#define dictionary_h__ 

extern char *BoyerMoore_positive(char *string, int strLength); 
extern char *BoyerMoore_negative(char *string, int strLength); 
extern char *BoyerMoore_skip(char *string, int strLength); 

#endif 

функция definations: dictionary.cpp

#include<stdio.h> 
#include<string.h> 
char *BoyerMoore_positive(char *string, int strLength) 
{ 
} ---- //for each function 

и главный main.cpp файл:

#include "dictionary.h" 
#pragma GCC diagnostic ignored "-Wwrite-strings" 
using namespace std; 
void *SocketHandler(void *); 

int main(int argv, char **argc) 
{ 

---- 

    skp = BoyerMoore_skip(ch[i], strlen(ch[i])); 
     if(skp != NULL) 
     { 
      i++; 
      printf("in\n"); 
      continue; 
     } 
     printf("\n hi2 \n"); 
     str = BoyerMoore_positive(ch[i], strlen(ch[i])); 
     str2= BoyerMoore_negative(ch[i], strlen(ch[i])); 
---- 
} 

Когда я exe мило main.cpp

это дает:

/tmp/ccNxb1ix.o: In function `SocketHandler(void*)': 
LinServer.cpp:(.text+0x524): undefined reference to `BoyerMoore_skip(char*, int)' 
LinServer.cpp:(.text+0x587): undefined reference to `BoyerMoore_positive(char*, int)' 
LinServer.cpp:(.text+0x5bd): undefined reference to `BoyerMoore_negative(char*, int)' 
collect2: error: ld returned 1 exit status 

Я не знаю, почему она не может найти функцию! Помогите оценить!

+2

ли вы передать 'dictionary.o' команде компоновщика? –

+1

Вы используете [зарезервированный идентификатор] (http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-a-c-identifier). – chris

ответ

3

Вы должны собрать как исходные файлы в main.o и dictionary.o, а затем связать эти объектный файл вместе в окончательный исполняемый файл:

$ g++ -c main.cpp 
$ g++ -c dictionary.cpp 
$ g++ -o myexe main.o dictionary.o 

Или вы можете построить и ссылку на одном дыхании:

$ g++ -o myexe main.cpp dictionary.cpp 

Обычно вы создаете Makefile, чтобы извлечь тяжелую работу из этого процесса, которая может быть такой же (непроверенной):

myexe: main.o dictionary.o 

Тогда это просто:

$ make 
+0

Спасибо большое! Мне не хватало словаря.cpp в компиляции! – user123

1

Вы уверены, что ваш dictionary.cpp включен в ваш проект и построен без ошибок? . Компилятор не может найти эти функции в объектных файлах после компиляции, проверить полный журнал на ошибку компиляции или успех вашего файла dictionary.cpp.