在头文件中包含函数

时间:2013-08-18 07:35:11

标签: c++

我有头文件:

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

函数定义: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]) );
----
}

当我执行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 个答案:

答案 0 :(得分:3)

您需要将两个源文件编译为main.odictionary.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

答案 1 :(得分:1)

您确定您的dictionary.cpp已包含在您的项目中且构建正确吗? 链接器在编译后无法在对象文件中找到这些函数,请查看完整日志以了解编译错误或dictionary.cpp文件是否成功。