【问题标题】:Compilation error when declaring derived object as a private member in a class将派生对象声明为类中的私有成员时出现编译错误
【发布时间】:2013-12-09 15:09:48
【问题描述】:

我的编译器抱怨我将一个对象声明为不同类的私有成员(如下所示)给了我这个错误:

私人:

   ForwardStrategy::ForwardStrategy* forwardStrategy;

   ForwardToStrategy::ForwardToStrategy* forwardToStrategy;

/home/ics45c/projects/p4/src/Person.hpp:45:19:错误:对“ForwardStrategy”的合格引用是一个构造函数 可以声明构造函数的地方的名称而不是类型 ForwardStrategy::ForwardStrategy* forwardStrategy; ^ /home/ics45c/projects/p4/src/Person.hpp:47:21:错误:对“ForwardToStrategy”的合格引用是一个构造函数 可以声明构造函数的地方的名称而不是类型 ForwardToStrategy::ForwardToStrategy* forwardToStrategy; ^

产生了 2 个错误。

所以看起来编译器认为我指的是构造函数而不是类型,但我不确定如何纠正这个问题......

对糟糕的格式感到抱歉...我不太确定如何正确执行此操作,但在此先感谢!

【问题讨论】:

  • 如果你只写ForwardStrategy* forwardStrategy;而不是ForwardStrategy::ForwardStrategy* forwardStrategy;会不会起作用,因为我认为最后一个是指类的成员而不是类本身(作为新定义的类型)

标签: c++


【解决方案1】:

只需将其更改为:

private:

ForwardStrategy* forwardStrategy;

ForwardToStrategy* forwardToStrategy;

因为它在您的问题中的编写方式意味着您正在尝试访问该类的成员(即构造函数)而不是定义它的实例。

【讨论】:

  • 我想我应该添加更多信息,我的错......策略在他们自己的头文件中,我将它包含在我的文件顶部
  • @user3029740,标头与命名空间不同,它们也不会隐式添加命名空间。您是否尝试过 T-D 的建议?什么有效?什么不起作用?
  • 我解决了这个问题。显然我遇到了循环包含问题,因为我忘记从我的一个标题中删除#include。不过感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2018-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-18
  • 1970-01-01
  • 2020-09-07
  • 1970-01-01
相关资源
最近更新 更多