1

EDITこれは解決しました:問題は、ソースファイルを編集した後にライブラリを再構築していたにもかかわらず、テストを再試行する前にライブラリを削除していなかったため、そこにいくつかの古いファイルがありました。

だから私はそのように設定されたライブラリを持っています

個人.h

#ifndef INDIVIDUAL_H
#define INDIVIDUAL_H
....
namespace dgal {
    class individual {
        public:
            individual() = delete;
            individual(const size_t numWeights);
            individual(const std::shared_ptr<dgal::individual> parentA, const std::shared_ptr<dgal::individual> parentB);
            ...
    };

}
#endif

個人.cpp

#include "individual.h"
...
dgal::individual::individual(const size_t numWeights) : weights(numWeights) {
    ...
}

dgal::individual::individual(const std::shared_ptr<dgal::individual> parentA, const std::shared_ptr<dgal::individual> parentB){
    ...
}

これはコンパイルされて静的ライブラリに入れられます

私のテストをビルドするための私のmakefileはそうです

includes = -I../src/
LDLIBS = -L../build -ldgal -pthread
CXXFLAGS = -std=c++11 -Wall -Wextra $(includes)

all:
    $(CXX) $(CXXFLAGS) -o test.out main.cpp $(LDLIBS)
    @echo "Tests built"

main.cpp は次のようになります。

...
class test : public dgal::individual {
    public:
        test() : dgal::individual(10) {std::cout << "test constructor" << std::endl;}
        test(const std::shared_ptr<dgal::individual> a, const std::shared_ptr<dgal::individual> b) : dgal::individual(a, b) {}
};

int main(){

    std::shared_ptr<test> A(new test);
    std::shared_ptr<test> B(new test);

    std::shared_ptr<test> C(new test(A,B));
    return 0;
}

dgal::individual::individual(unsigned long)しかし、本当に私のsize_tコンストラクターであるmy について、g++ から複数の定義エラーが発生しています。ただし、コンストラクターを使用しようとするまでエラーは発生しtest(const std::shared_ptr<dgal::individual> a, const std::shared_ptr<dgal::individual> b)ません。複数の定義がどこから来ているのかわかりません。

正確なエラーを編集:

g++ -std=c++11 -Wall -Wextra -I../src/ -o test.out main.cpp -L../build -ldgal -pthread
../build/libdgal.a(individual.o): In function `dgal::individual::individual(unsigned long)':
individual.cpp:(.text+0x0): multiple definition of `dgal::individual::individual(unsigned long)'
../build/libdgal.a(individual.o):individual.cpp:(.text+0x0): first defined here
../build/libdgal.a(individual.o): In function `dgal::individual::individual(unsigned long)':
individual.cpp:(.text+0x0): multiple definition of `dgal::individual::individual(unsigned long)'
../build/libdgal.a(individual.o):individual.cpp:(.text+0x0): first defined here

デフォルトのコンストラクターを削除しないように編集し、引数を持つコンストラクターの代わりにデフォルトのコンストラクターを使用しようとすると、正常に動作し、複数の定義について文句を言うことはありません

4

0 に答える 0