namespace A {
#include "C.hpp"
}
Это очень странная вещь.
Это помещает все, что объявлено в заголовке, в пространство имен с именем A
;в частности, он дает вам объявление A::C
, которое отличается от класса ::C
, который вы получаете, когда включаете заголовок без окружающего пространства имен.
Вы предоставили определение для ::C::C()
;но main.cpp
требует определения для A::C::C()
, так как это класс, который он использует.Это нигде не определено, поэтому ошибка.
Либо правильно вставьте C
в namespace A
, переместив пространство имен в файл заголовка (и исправьте C.cpp
, чтобы использовать это пространство имен), либо избавьтесь от namespace A
.