gpt4 book ai didi

c++ - 为什么一个代码编译而另一个失败?

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

此代码符合:

template <class T>
class A {};

void main () {

A<int> a;
vector<A<int>> vec;
vec.push_back(a);
}

但这不是:

void main () {

SharedPointer<int> sp;
vector<SharedPointer<int>> vec;
vec.push_back(sp);
}

我收到这个错误:

error C2558: class 'SharedPointer' : no copy constructor available or copy constructor is declared 'explicit'

SharedPointer header :(所有方法都在 header 中实现)

#include <iostream>
#include "Myexception.h"
using namespace std;

#pragma once

template<class T>
class SharedPointer {
T* ob;
int* refcount;
bool shareable;

int refdown();
int refup();
void markUnshareable();
public:

virtual ~SharedPointer();
SharedPointer():shareable(true);
SharedPointer(T pointee):shareable(true);
SharedPointer(SharedPointer<T>& sp);
SharedPointer operator=(const SharedPointer<T>& sp);
bool operator==(const SharedPointer<T>& sp);
const T& operator[](const int idx) const;
T& operator[](const int idx);
T* operator->() const;
T& operator*() const;
void setOb(T pointee);
const T& getOb() const;
int getRefcount();
bool isShareable();
bool isShared();
};

最佳答案

问题在于复制构造函数:

SharedPointer(SharedPointer<T>& sp);

不能仅用于复制 const 指针。添加缺少的 const,一切都应该没问题:

SharedPointer(const SharedPointer& sp);   // <T> is harmless, but unnecessary

(您还必须修复构造函数定义中的语法错误,并且您应该将 main 的返回类型更改为 int。删除 using namespace std; 也是一个好主意。)

关于c++ - 为什么一个代码编译而另一个失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23272769/

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