【问题标题】:How can I make child constructor if parent doesn't have constructor without params [closed]如果父级没有没有参数的构造函数,我如何制作子构造函数[关闭]
【发布时间】:2021-09-03 21:49:14
【问题描述】:

我有无法用父类修改的库:

class A {
public:
   A(immpl i) { /* do smth */ }
}

我要写子类:

class B : public A { 
public:
    B(FSImplPtr impl) : A(impl) {};
};

一切正常。所以我可以通过以下方式创建子类:

B(SomeFunction(new VFSImpl()));

所以,我想制作没有参数的构造函数,就像这样:

 class B : public A { 
 public:
    B() : A(SomeFunction(new VFSImpl())) {};
 };

但是当我尝试它时 - 我有一个错误:

error: expected primary-expression before '(' token

  B() : A(FSImplPtr(new VFSImpl())) {}
                   ^

error: expected type-specifier before 'VFSImpl'
  B() : A(FSImplPtr(new VFSImpl())) {}
                    ^

我该如何解决?

【问题讨论】:

  • 首先,向我们展示真实代码作为正确minimal reproducible example 的一部分。在您的“源”中您有B() : A(SomeFunction(new VFSImpl())) {};,但在错误消息中您有B() : A(FSImplPtr(new VFSImpl())) {}。在您的代码中 SomeFunction 是一个 function (如果名称没有说谎)。 FSImplPtr 是一个类型
  • @WhozCraig 对不起。 SomeFunction 是 FSImplPtr 类的构造函数。您可以在此处阅读有关此课程的更多信息:github.com/esp8266/Arduino/blob/master/cores/esp8266/FS.h
  • 我将 FSImplPtr 替换为卡住溢出的代码,因为 FSImplPtr 更难理解它是什么
  • 您能否edit 您的问题并显示一个minimal reproducible example,世界上的其他人都可以完全如图所示剪切/粘贴到一个空白文件,然后重现您的 exact 编译错误?编译错误可能有很多原因,C++ 是当今使用的最复杂的通用编程语言。如果没有minimal reproducible example,任何人都不太可能帮助您。有关更多信息,请参阅How to Ask 问题。

标签: c++ oop c++14


【解决方案1】:

VFSImpl 存在吗?我在 git 文件中没有看到它。我认为这是一个拼写错误,您需要 FSImpl。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多