0

我有两组文件:PolynomialArithmetic.h/cpp 和 Options.h/cpp

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 $@ $(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

2 回答 2

4

内联函数必须在标头中,因为它必须在 PolynomialArithmetic.cpp 的编译期间可用。所以标题 Options.h 必须看起来像

inline int chosenHeap() { return BINARY_HEAP; }
于 2012-07-02T10:09:58.383 回答
0

从您的函数中删除内联规范。编译器不会将任何代码放入您的 Options.obj。

于 2012-07-02T10:09:16.230 回答