【问题标题】:Forward declare an abstract class from a different namespace [duplicate]转发从不同的命名空间声明一个抽象类[重复]
【发布时间】:2012-11-02 18:43:38
【问题描述】:

可能重复:
The type in a dynamic_cast must be a pointer or reference to a complete class type, or void *

我有一个命名空间 Fuzzy,它有一个名为 CuteDog 的抽象类(继承自另一个抽象类)。

我正在编写一个名为 PuppyArmy 的新类

我想在 PuppyArmy 和我的头文件中有一个指向可爱狗的指针,我正在尝试这个。

namespace Fuzzy { class CuteDog }

using namespace Fuzzy;

class PuppyArmy { 
  ...
  CuteDog *cute;
}

然后当我在我的 cpp 文件中时,我得到了这个

using namespace Tough;

....
cute = dynamic_cast<::Fuzzy::CuteDog*>(foo()); // where foo() returns the parent class of CuteDog*

编译器告诉我

 C2440: '=' : cannot convert from Fuzzy::CuteDog * to PuppyArmy::Fuzzy::CuteDog *

任何指向我在这里做错了什么的指针?

【问题讨论】:

  • 尝试将dynamic_cast&lt;::Fuzzy.. 更改为dynamic_cast&lt; ::Fuzzy...,因为我的编译器认为&lt;: 是三合字母/有向图的开头。
  • 一旦我修复了您的转录错误,它works fine 就为我服务。我想也许你没有告诉我们什么。请发布一个简短、完整的程序来演示您的错误。 SSCCE.ORG

标签: c++ inheritance namespaces forward-declaration


【解决方案1】:

您似乎没有包含定义 CuteDog 实现的头文件

【讨论】:

  • CuteDog 是我们使用的 API 的一部分,但无法访问源代码。
【解决方案2】:

如果有人被标题引导到这里。这是如何从不同的名称空间转发声明一个类(抽象或非抽象):

namespace different {
  class SomeClass;
}

【讨论】:

    猜你喜欢
    • 2011-03-17
    • 2017-06-01
    • 1970-01-01
    • 2013-09-30
    • 2014-11-05
    • 2012-10-30
    • 2015-11-11
    • 2013-03-05
    相关资源
    最近更新 更多