【发布时间】:2023-04-10 19:27:02
【问题描述】:
我正在使用多重继承,一个基类 (BaseBNeedsA) 需要访问另一个基类 (BaseA)。我知道这可以通过委托更清晰地解决,但它确实需要很多转发代码,而且我有几个类似的类,如 BaseBNeedsA。
在 Visual Studio 2013 中,我可以使用 BaseA & 进行访问,在 Visual Studio 2015 中,这似乎会导致对象切片等。 (编译,但引用无效)。所以我把它改成了BaseA * const,一切正常。然而,在这样做的时候,我发现了一些奇怪的东西。下面的代码在 Visual Studio 2015 中编译,我不知道为什么会这样。
class BaseA
{ };
class BaseBNeedsA
{
public:
BaseBNeedsA(BaseA *baseA)
: _baseA(baseA)
{ }
private:
BaseA * const _baseA;
};
class Derived : public BaseA, public BaseBNeedsA
{
public:
Derived()
: BaseA(),
BaseBNeedsA(*this) // Why does this compile? Handing a BaseA&, but BaseA* required!
{ }
};
int main(int argc, char** argv)
{
Derived d;
return 0;
}
【问题讨论】:
-
它调用了
BaseBNeedsA的拷贝构造函数 -
@PiotrSkotnicki 这不是评论!
-
我怎么会错过这个。让它成为一个答案,所以我可以接受它。
标签: c++ visual-studio compiler-errors multiple-inheritance