gpt4 book ai didi

c++ - call没有匹配函数,为什么?

转载 作者:行者123 更新时间:2023-11-28 06:00:04 25 4
gpt4 key购买 nike

我快完成我的智能指针了,所以我将它上传到我大学的网站,该网站对我的代码运行了一些自动化测试。

问题是我不知道正在执行哪种测试。我能够读取我所做的自动化测试的标准输出:

In instantiation of ‘my_pointer<T>::my_pointer() [with T = tester]’:
error: no matching function for call to ‘tester::tester()’
note: candidates are:
tester::tester(my_pointer<tester>)
candidate expects 1 argument, 0 provided
tester::tester(const tester&)
candidate expects 1 argument, 0 provided

所以我猜出于某些奇怪的原因它不会调用我的 my_pointer() 构造函数?这是我的智能指针类:

template<class T>
class my_pointer {
T* raw_pointer;

public:
my_pointer() {
raw_pointer = new T();
raw_pointer->incRefCnt();
}

my_pointer(T *obj) : raw_pointer(obj) {
if(raw_pointer != NULL) raw_pointer->incRefCnt();
}

my_pointer(const my_pointer<T>& smart_pointer) : raw_pointer(smart_pointer.raw_pointer) {
if(raw_pointer != NULL) raw_pointer->incRefCnt();
}

T& operator*() {
return *raw_pointer;
}

T* operator->() {
return raw_pointer;
}

operator T*() {
return raw_pointer;
}

my_pointer<T> &operator=(const my_pointer<T> &smart_pointer) {
if(this != &smart_pointer && raw_pointer != NULL) {
/** if this was the last reference to the given memory address */
if (raw_pointer->decRefCnt() == 0) {
delete raw_pointer;
}

raw_pointer = smart_pointer.raw_pointer;
raw_pointer->incRefCnt();
}

return *this;
}

bool operator== (const T* pointer) {
return raw_pointer == pointer;
}

bool operator!= (const T* pointer) {
return raw_pointer != pointer;
}

bool operator== (const my_pointer<T> &smart_pointer) {
return raw_pointer == smart_pointer.raw_pointer;
}

bool operator!= (const my_pointer<T> &smart_pointer) {
return raw_pointer != smart_pointer.raw_pointer;
}

~my_pointer() {
if(raw_pointer->decRefCnt() == 0 && raw_pointer != NULL) {
delete raw_pointer;
}
}
};

这是一个类,其中可以计算引用:

class refcounted {
private:
int count;
public:
refcounted() : count(0) { }

int incRefCnt() {
return ++count;
}

int decRefCnt() {
return --count;
}
};

你能看出代码有什么问题吗?提前致谢!

最佳答案

这就是它所说的。

您正在执行 new T()(即 new tester()),但是 tester 中没有默认构造函数。

在不知道作业约束的情况下不可能提出解决方案。

但是,一般来说,您会在智能指针构造函数中接受一个 T*,这样调用站点可能会负责 [动态] 构造它,但是这是必需的。 (另一种方法是可变参数模板构造函数,它有效地模仿了标准的“就地”构造。)

你似乎已经这样做了,所以你可以尝试完全删除默认构造函数......但显然赋值的某些部分需要它,否则它不会被调用。

通常默认构造的智能指针基本上什么都不做。你可以试试看。

关于c++ - call没有匹配函数,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33467420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com