Я наткнулся на старый код, в котором мало проектов, и в каждом из них есть несколько абстрактных классов, заголовков и файлов cpp.
Странно то, что в одном из проектов абстрактный класс использует функцию, объявленную в другом абстрактном классе в том же проекте. Что меня удивило, так это отсутствие ссылки на другой абстрактный класс из текущего абстрактного класса, и компилятор не выдавал никаких ошибок.
Единственное, что я заметил, это то, что оба файла находятся в пространстве имен.
Может кто-нибудь объяснить, как это возможно?
Вот пример кода класса, на который ссылается
#ifndef ClassADef
#define ClassADef
#include <string>
namespace globalNameSpace {
class ClassA {
public:
virtual ~ClassA() = default;
virtual std::string method1() const = 0;
};
}
#endif
Вот пример кода для класса, который ссылается на вышеуказанный класс.
#ifndef ClassBDef
#define ClassBDef
#include <string>
//I was expecting an include statement which references the above class
namespace globalNameSpace {
class ClassB {
public:
virtual std::string method2(const ClassA& method1, const bool variable) = 0;
//I was expecting the compiler to throw an error.
};
}
#endif