У меня есть два класса с одинаковым именем в разных пространствах имен. Я хочу, чтобы один из этих классов ссылался на другой класс. Причина в том, что я переношу на какой-то новый код, и я хочу обновить старый код, чтобы просто перейти к более новому коду.Как я могу использовать класс с тем же именем из другого пространства имен в моем классе?
Вот супер простой пример:
namespace project {
namespace legacy {
class Content {
public:
Content(const string& url) : url_(url) { }
string url() { return url_; }
private:
string url_;
};
}} // namespace project::legacy;
namespace project {
namespace current {
class Content {
public:
Content(const string& url) : url_(url) {}
string url() { return url_; }
private:
string url_;
}} // namespace project::current;
я ожидал, чтобы быть в состоянии сделать следующее project::legacy::Content
, но у меня возникли проблемы с некоторыми вопросами компоновщика. Это проблема с тем, как я пытаюсь это сделать, или мне нужно более внимательно изучить мои файлы проекта, чтобы узнать, есть ли у меня какие-то странные проблемы с зависимостью?
#include "project/current/Content.h"
namespace project {
namespace legacy {
class Content {
public:
Content(const string& url) : actualContent_(url) { }
string url() { return actualContent_.url(); }
private:
project::current::Content actualContent_;
};
}} // namespace project::legacy;
Тестовое приложение компилируется нормально, если я пытаюсь ссылаться на экземпляр project::current::Content
но если я пытаюсь ссылаться project::current::Content
из project::legacy::Content
я получаю:
undefined reference to `project::current::Content::Content(...)`
UPDATE
Как это оказывается, это проблема GNU Autotoolset и не была связана с реальной темой. Спасибо всем за помощь и предложения!
Глупый вопрос: вы включили исходный файл (предположительно новый), содержащий реализацию «project :: current :: Content» на вашем этапе ссылки на проект? –
@Greg Я так думаю?Я использую autotoolset, и иногда сложно определить, что происходит. Однако я могу создать новый экземпляр «project :: current :: Content» в тестовом приложении без проблем. Я получаю эту ошибку компоновщика только в том случае, если я использую класс устаревших, что заставляет меня задаться вопросом, неправильно ли я делаю это одноименное имя. –
@Greg также стоит отметить, что все файлы (тестовое приложение, текущий код и старый код) находятся в одном проекте autotoolset. Я говорю это только так, чтобы было ясно, что устаревший код и текущий код не находятся в отдельных библиотеках. –