Предупреждение C4827, переопределяющее ToString в классе C++/CX Metro

У меня есть класс компонента C++/CX Windows Store, и я хотел бы реализовать собственный общедоступный метод ToString, который я могу вызывать из C#. Компилируется нормально, но я получаю странное предупреждение от компилятора. Вот код, который воспроизводит предупреждение:

public ref class Foo sealed
{
public:
    String^ ToString()
    {
        return ref new String(L"This is from class Foo");
    }
};

Когда я компилирую вышеупомянутый класс, Visual Studio 2013 показывает это предупреждение:

предупреждение C4827: открытый метод ToString с 0 параметрами должен быть помечен как виртуальный и переопределить (Foo.cpp)

Однако, когда я добавляю "виртуальное переопределение" в сигнатуру метода, я получаю синтаксические ошибки в компиляторе. Как я могу переопределить Object.ToString() из класса C++ / CX?

1 ответ

Решение

virtual идет в начале, override идет в конце. Кроме того, вы можете избавиться от ref new Stringкомпилятор может выяснить, что вы хотите, чтобы строковая константа рассматривалась как String^,

public ref class Foo sealed
{
public:
    virtual String^ ToString() override
    {
        return "This is from class Foo";
    }
};
Другие вопросы по тегам