Игнорирование пространств имён. Мешанина из системных и кастомных классов и методов. Кривые руки или кривая реализация?
Я пишу на C#, поэтому некоторые вещи очевидные опытным разработчикам, пишущим на С++ мне неизвестны. Потому обращаюсь со следующим вопросом и сопутствующим куском кода:
Код:
//MObject.h
#pragma once
#include "Stdafx.h"
namespace MyNamespace{
namespace System
{
public ref class MObject
{
public:
virtual void ToString() = 0;
};
}}
#pragma once
#include "Stdafx.h"
namespace MyNamespace{
namespace System
{
public ref class MObject
{
public:
virtual void ToString() = 0;
};
}}
Error 1 error C4485: 'MyNamespace::System::MObject::ToString' : matches base ref class method 'System::Object::ToString', but is not marked 'new' or 'override'; 'new' (and 'virtual').
Подскажите - каким местом этот ту... кхм... великолепный язык умудряется сопоставить мой MyNamespace::System::MObject::ToString с нетовским System.Object.ToString(), невзирая на разницу в пространствах имён, имени класса и (!!!) сигнатуре метода (функции).
WTH?!
Это сухая выжимка из данной проблемы на простейшем примере. К примеру, мой статичный метод MyNamespace::System::Environment::GetCurrentDirectory() пересекается с глобальным GetCurrentDirectory() (эту проблему уже подпёр костылями и решил, но всё равно неприятно).
Заранее спасибо за любые комментарии.
Проблема была в "ref". До кучи сама либа компилировалась с поддержкой CLR. Отключил, убрал. Проблема разрешилась.
все обьекты неявно отнаследованы от object.
вы не можете без последствий использовать имена функций базового класса.
Кроме того, в шарпе подобная ошибка - только warning. Ну, наверное в сях это построже сделали.