2016-04-23 55 views
-1

我创建了Windows运行时组件(名称空间:动物),我想覆盖Platform :: String :: ToString方法。在Windows运行时组件中重写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在 “虚拟字符串^的ToString()重写{}”:

· 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 
+0

在你的.h文件中使用Platform :: String,所以你不需要使用'namespace Platform;'来作为范围。并修复你的.cpp文件中的错误。 –

+0

不要在问题中提出答案。问题在于这个问题。答案在答案部分。 –

回答

0

在您的派生类中执行此操作:

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

编辑:

你还必须在头文件中声明ToString()的末尾{ }括号?如果是这样,那么你已经定义了方法体。所以编译器会抱怨.cpp文件中的重新定义。

+0

我试过在Dog.h和Dog.cpp中以及更多的变体。同样的错误。 – Joe

0

解决:

  1. 删除ToString()方法中Dog.cpp
  2. 替换 “字符串” 由 “平台::字符串” 在Dog.cpp和Dog.h
  3. 添加“virtual Platform :: String^ToString()override {return _name;};”在Dog.h中。
相关问题