2013-05-13 3 views
0

저는이 간단한 프로그램을 가지고 있지만 단순한 오류를 없앨 수는 없습니다."function"에 대한 정의되지 않은 참조

나는이

#ifndef FUNCTIONLOOKUP_H_INCLUDED 
    #define FUNCTIONLOOKUP_H_INCLUDED 


    enum functions 
    { 
     foo, 
     bar 
    }; 

    //predefined function list 
    int lookUpFunction(enum functions); 

    #endif // FUNCTIONLOOKUP_H_INCLUDED 

와 헤더 파일이 내가 헤더 파일을 포함 어디에 내 주에서()를 lookUpFunction를 호출 할 때 SRC 파일에 내가 lookUpFunction 이제

의 정의가 그것은 그것에 대한 정의되지 않은 참조를 제공합니다. 다른 도움이 안되는 질문들.

#include <stdio.h> 
    #include <stdlib.h> 
    #include "FunctionLookUp.h" 

    int main() 
    { 
    lookUpFunction(foo); <--- 
    return 0; 
    } 

기능 구현

나는이 오류가 어디에서 오는지 알아낼 수 없습니다
#include <stdio.h> 
    #include "FunctionLookUp.h" 

    typedef void (*FunctionCallback)(int); 
    FunctionCallback functionList[] = {&foo, &bar}; 

    void foo(int i) 
    { 
    printf("foo: %d", i); 
    } 

    void bar(int i) 
    { 
    printf("bar: %d", i); 
    } 

    int lookUpFunction(enum functions) 
    { 
    int test = 2; 

    //check if function ID is valid 
    if(functions >= sizeof(functionList)) 
    { 
     printf("Invalid function id"); // error handling 
     return 0; 
    } 

    //call function 
    functionList[functions](test); 
    return 1; 
    } 

.

+0

당신은 FunctionLookup.o''와 연결, 또는 컴파일러에'FunctionLookup.c'을 추가해야 문제 해결하기 위해

/* FunctionLookUp.c */ #include "FunctionLookUp.h" int lookUpFunction(enum functions) { /* code ... */ return x; } 

을 기도. –

+2

스스로'false','true'를 정의하지 마십시오. Modern C는'stdbool.h '헤더에 그것들을 제공해야한다. 그리고 만약 당신이 진짜 이유가 없다면 (그러나 제발하지 말아주세요) C에서 자연스럽게 나오도록, 즉 '0'은 거짓이고 0이 아닌 값은 참이라는 것을 다른 방식으로 정의하십시오. 여기에'true == 0'과'false == 1'이 있습니다. –

+0

Daniel Fischer : 저는이 프로그램을 12 개 만들었을 때 코드 블럭을 에디터로 사용하고 있습니다. 갑자기 변경해야 할 일이 무엇입니까 Jens Gustedt : 이미 삭제 된 것을 알고 있습니다.) – flexzican

답변

0

코드를 구현하지 않습니다.

그래서 당신이보고있는 것은 링커 오류 일 가능성이 높습니다. 호출 자체는 괜찮지 만 링커가 호출 할 코드를 찾을 수 없으므로 오류가 발생합니다.

그냥 함수를 선언해도 마술처럼 어딘가에서 나타날 수는 없으므로 실제 함수도 작성해야합니다.

과 유사한 일부 파일이 있어야합니다
+0

내가 말했듯이, 나는 FunctionLookUp.c로 작성 했으므로 코드가 작동합니다. – flexzican

1

: 어딘가에

+0

내가 이걸 잘 풀어 놓을거야. – flexzican

+0

당신의 Makefile을 보여줄 수있는 도움을 얻고 싶다면 gcc와 완전한 오류 메시지 –

+0

Codeblocks가 make 파일을 생성합니다. 왜 이것이 나를 너무 괴롭 히고 있는지. – flexzican

관련 문제