【发布时间】: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 问题。