在Windows运行时组件中覆盖ToString

时间:2016-04-23 16:38:02

标签: c++ win-universal-app c++-cx

我已经创建了一个Windows运行时组件(名称空间:动物),我希望覆盖Platform :: String :: ToString方法。

Dog.h

#pragma once

namespace Animal
{
    public ref struct Dog sealed
    {
    private:
        String^ _name; // Yes, it's private
    public:
        Dog();
        //String^ ToString();
        virtual String^ ToString() override { } // I've found this in internet
    };
}

Dog.cpp

#include "pch.h"
#include "Dog.h"

using namespace Animal;
using namespace Platform;

String^ _name;
Dog::Dog()
{
}
String^ Dog::ToString()
{
    return _name;
}

所有编译错误都在Dog.h的“virtual String ^ ToString()override {}”中:

· Error C2433 'Animal::Dog::String': 'virtual' not permitted on data declarations
· Error C4430 missing type specifier - int assumed. Note: C++ does not support · default-int
· Error C2143 syntax error: missing ';' before '^'
· Error C2334 unexpected token(s) preceding '{', skipping apparent function body

2 个答案:

答案 0 :(得分:0)

在派生类中执行此操作:

virtual String^ ToString() override
{
    return _name;
}

编辑:

在头文件中{ }声明的末尾是否还有ToString()个大括号?如果是这样,那么您已经定义了方法体。因此编译器会抱怨.cpp文件中的重新定义。

答案 1 :(得分:0)

<强>解决:

  1. 删除Dog.cpp中的ToString()方法
  2. 将Dog.cpp和Dog.h中的“Platform :: String”替换为“String”
  3. 添加“virtual Platform :: String ^ ToString()override {return _name;};”在Dog.h。