Узнав больше о классах и указателях, я реорганизовал программу, которая у меня была, и уничтожил> 200 строк кода, создав в процессе два других класса, Location
и Piece
. Проблема в том, что после компиляции всего, компоновщик жалуется, что конструктор для Piece
определен несколько раз с множеством ошибок:
In function 'Piece': board.o
multiple definition of 'Piece::Piece(int)` char_traits.h
In function 'Piece': board.o
multiple definition of 'Piece::Piece(int)` piece.cpp
In function 'Piece': player.o
multiple definition of 'Piece::Piece(int)` piece.cpp
In function 'Piece': player.o
multiple definition of 'Piece::Piece(int)` piece.cpp (yes, same exact error!)
In function 'Piece': refereee.o
multiple definition of 'Piece::Piece(int)` char_traits.h
In function 'Piece': referee.o
multiple definition of 'Piece::Piece(int)` piece.cpp
...
Когда я нажимаю на ошибку для char_traits.h
, это приводит меня к следующему:
static size_t
length(const char_type* __s) //error points here to line 262
{ return __builtin_strlen(__s); }
Другой char_traits.h
подводит меня к
static int
compare(const char_type* __s1, const char_type* __s2, size_t __n) //line 258, error points here too
{ return __builtin_memcmp(__s1, __s2, __n); }
И, как вы знаете, location.h - это единственное, что включает в себя piece.h (ну, другие файлы включают в себя piece.h косвенно из location, включая piece.h), board.h это единственное, что включает в себя location. ч, и куча классов включает в себя board.h
Я попытался изменить защиту заголовка на _OTHELLO_PIECE_H
и попытался переименовать класс в OPiece (через IDE). Ни одна из них не устранила проблему.
Самое смешное, что в одной из ошибок есть «in function 'OPiece':», и после этого моя IDE помещает chatter.o
, хотя ни chatter.h, ни chatter.cpp не содержат ничего, что включает OPiece.
Есть идеи, что может быть причиной этой ошибки переопределения?