转换构造函数C++

Converting Constructor C++

本文关键字:C++ 构造函数 转换      更新时间:2023-10-16

嘿伙计们,我写了这门课...

struct TestStruct {
int a;
TestStruct(int pA) : a(pA){};
};
template <typename T> class ClassA {
public:
 ClassA() : mTestStruct(sizeof(T)) {}
 ClassA(T *ptr) : mTestStruct(sizeof(T)){};
 ClassA(T param) : mTestStruct(sizeof(T)){};
 ClassA(ClassA<T> &p){};
private:
 TestStruct mTestStruct;
 ClassA<T> &operator=(T *ptr) { return *this; };
};

并想做这样的事情。(我认为它被称为转换构造函数。

    ClassA<long> p = new long;

但我明白了。我用 -std=c++14 编译了它

no viable constructor copying variable of type 'ClassA<long>'

顺便说一下,这个工作...

ClassA<long> p(new long)

有什么想法吗?

编辑:好的,这是我用来重现错误消息的代码。

ClassA<long> p(new long);

调用 ClassA 的构造函数,该构造函数long为参数 (T=long (。

ClassA<long> p = new long;

尝试使用longClassA的复制构造函数将新long赋值到p中,这当然不存在,因此不能使用。


您需要在 ClassA 中创建一个复制构造函数,该构造函数获取一个&long作为复制的变量,如下所示:

ClassA(const T &obj)
{
    // do what you want to happen in the copy constructor
}