0

私が書いたカスタムクラスのさまざまなコンストラクターを持つ大規模なプロジェクトがあります。クラスごとに、クラス定義とコンストラクターを含むヘッダー ファイルが存在します。さらに、クラスごとに、そのクラスのメンバー関数の定義を含む .cpp ファイルが存在します。

make を呼び出すと、すべてが .o ファイルに正常にコンパイルされます。ただし、リンカーは、各コンストラクターのシンボルが重複していると不平を言っています。

コンストラクターの定義を .cpp ファイルに移動しようとしましたが、問題は解決しませんでした。

私のメイクファイルは次のとおりです

CC=g++
CFLAGS=-c -Wall
LDFLAGS=
PRJ_SRC_DIR=./source
GENHEADER_DIR=/usr/local/include/genheaders
PRJ_SOURCES= #long list of .cpp files
GENERAL_SOURCES= #long list of .cpp files
SOURCES=$(PRJ_SOURCES:%=$(PRJ_SRC_DIR)/%) $(GENERAL_SOURCES:%=$(GENHEADER_DIR)/%)
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=networkMole.out

all: $(SOURCES) $(EXECUTABLE)

$(EXECUTABLE):$(OBJECTS)
    $(CC) $(LDFLAGS) $(OBJECTS) -o $@

.cpp.o:
    $(CC) $(CFLAGS) $< -o $@

すべてのコンストラクターは、クラスの本体内で宣言され、クラスの最後で定義されます。

/* class1.hpp */
classOne{ 
    /* Some Code */
    ClassOne();
};
ClassOne::ClassOne(){ /*Code*/}
4

0 に答える 0