2012-07-02 11 views
0

我有兩組文件:PolynomialArithmetic.h/CPP和Options.h/CPP「未定義的符號」 調用C從另一個文件++函數時

Options.h定義爲:

// Options.h 

#ifndef Options_h 
#define Options_h 

#define BINARY_HEAP 0 

inline int chosenHeap(); 


#endif 

Options.cpp定義爲:

// Options.cpp 

#include "Options.h" 

inline int chosenHeap() { return BINARY_HEAP; } 

PolynomialArithmetic.cpp包含以下內容:

// PolynomialArithmetic.cpp 

#include "PolynomialArithmetic.h" 
#include "Options.h" 

void foo() { 
... 
    if (chosenHeap() == BINARY_HEAP) { 
     // DO SOMETHING 
    } 
... 
} 

當我編譯,我得到的錯誤:

Undefined symbols for architecture x86_64: 
    "chosenHeap()", referenced from: foo() in PolynomialArithmetic.o 

我猜這是某種形式的連接錯誤。下面是我如何編譯代碼:

# Makefile 

# some configs 
.... 

main: Options.o PolynomialArithmetic.o 
    $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $^ -o [email protected] $(LDLIBS) 


Options.o: Options.h Options.cpp 
    $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c Options.cpp 

PolynomialArithmetic.o: PolynomialArithmetic.cpp PolynomialArithmetic.h Options.h 
    $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c PolynomialArithmetic.cpp 

任何想法?

回答

4

內聯函數必須位於標題中,因爲它在編譯PolynomialArithmetic.cpp期間必須可用。 因此,標題Options.h必須看起來像

inline int chosenHeap() { return BINARY_HEAP; } 
0

從函數中刪除內聯規範。編譯器不會將任何代碼放入您的Options.obj。

相關問題