【发布时间】:2015-11-11 03:59:09
【问题描述】:
我有以下课程,写成这样,可以完全工作,无论 typedef 是什么:
class A
{
protected:
typedef uchar mDataType;
std::vector<mDataType> mData;
uint32 mWidth;
uint32 mHeight;
friend class C;
public:
A();
A(void* data, uint32 width, uint32 height, size_t dataSize);
A(const A& other);
A(A&& other);
A& operator=(const A& other);
A& operator=(A&& other) = delete;
~A();
}
我想做一个子类,其实差不多,除了重载的typedef:
class B : public A
{
private:
typedef float mDataType;
public:
using A::A;
using A::operator=;
};
我想要实现的是做一个B类,也就是: - 与 A 相同 - 具有所有 As 函数(A 中的成员函数很少,我没有编写) - 拥有所有 As 运算符 - 拥有所有 As 构造函数 - 有不同的 typedef - 具有相同的析构函数
我的代码不起作用,因为我无法调用 B(void*, uint32, uint32, size_t),这正是我想要的。 (Intellisense 仅向我显示 B() 和 B(const B&) 作为可用的构造函数)。
【问题讨论】:
-
你用的是什么编译器?您确定要在 C++11(或更高版本)模式下编译吗?
-
哪个编译器? Visual Studio 仅从 2015 年起支持继承构造函数。
-
非常感谢!我正在使用VS2013。是时候到 2015 年了,我猜……
-
您知道
mData仍然是std::vector<uchar>,并且基类中mDataType的所有使用都引用uchar,而不管子类中的mDataType是什么? -
我想让基类对象具有 std::vector
而子类对象具有 std::vector 。在成员函数实现中,我只使用 mDataType,所以只改变它,我希望就足够了吗?
标签: c++ c++11 inheritance multiple-constructors inheriting-constructors