0

PolynomialArithmetic.h/cpp と Options.h/cpp の 2 つのファイル セットがあります。

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 に答える