Перетаскивание внешнего пространства имен в пространстве имен std во время поиска

В настоящее время я занимаюсь рефакторингом старого кода, чтобы он соответствовал стандартам корректности C ++ 14, и происходит что-то странное.

Эта ошибка пока уникальна и не появляется в остальной части кода. Я запутал фактические типы, потому что они не важны.

До рефакторинга следующий код работал нормально:

namespace N {
class A {
public:
A(B* blah) : _blah(blah); //class A owns the instance of class B.
~A() { delete m_blah; m_blah = nullptr; }
//...Lots more code.
private:
B* m_blah;
};
}

Я изменил все необходимые указатели на основе владения на соответствующие умные указатели:

#include <memory>

namespace N {
class A {
public:
A(std::unique_ptr<B> blah);
~A() { /* DO NOTHING */ }
private:
std::unique_ptr<B> m_blah;
};
}

Это больше не работает. Intellisense сообщает об ошибке:

"Error: namespace "N::std" has no member unique_ptr"

в объявлении конструктора. (Но НЕ декларация m_blah)

….Какие? Почему пространство имен стандартной библиотеки тянется в N ?!

Информация о версии:

  • VS2015 Community Edition (RTM) Версия 14.0.23107.0 D14REL
  • Командная строка разработчика сообщает cl версию: версия компилятора 19.00.23026

3

Решение

Я загрузил VS этим утром, и проблема исчезла сама по себе.

В попытке удостовериться, что я могу изолировать любые будущие проблемы, и поскольку база кода огромна, я вернулся к исходной точке, чтобы посмотреть, смогу ли я предотвратить ошибку:

  • Исключены все файлы кода из проекта, не связанные с проблемой.
  • Закомментирован код в связанных файлах, который не был напрямую связан с проблемой.
  • Переписал класс в минимальном контексте (используя умные указатели).

Все идет нормально.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]