C++ &引用;“未定义的符号”;调用C++;函数从另一个文件中删除
我有两组文件:PolynomialArithmetic.h/cpp和Options.h/cpp 选项h定义为:C++ &引用;“未定义的符号”;调用C++;函数从另一个文件中删除,c++,linker,makefile,undefined,symbols,C++,Linker,Makefile,Undefined,Symbols,我有两组文件:PolynomialArithmetic.h/cpp和Options.h/cpp 选项h定义为: // Options.h #ifndef Options_h #define Options_h #define BINARY_HEAP 0 inline int chosenHeap (); #endif // Options.cpp #include "Options.h" inline int chosenHeap() { return BINARY_HEAP;
// Options.h
#ifndef Options_h
#define Options_h
#define BINARY_HEAP 0
inline int chosenHeap ();
#endif
// Options.cpp
#include "Options.h"
inline int chosenHeap() { return BINARY_HEAP; }
Options.cpp定义为:
// Options.h
#ifndef Options_h
#define Options_h
#define BINARY_HEAP 0
inline int chosenHeap ();
#endif
// 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 $@ $(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
有什么想法吗?从函数中删除内联规范。编译器没有将任何代码放入Options.obj。从函数中删除内联规范。编译器没有将任何代码放入您的选项。obj。内联函数必须位于标题中,因为它必须在PolynomialArithmetic.cpp的编译过程中可用。 所以标题选项.h必须看起来像
inline int chosenHeap() { return BINARY_HEAP; }
内联函数必须位于标头中,因为它必须在PolynomialArithmetic.cpp的编译过程中可用。 所以标题选项.h必须看起来像
inline int chosenHeap() { return BINARY_HEAP; }