此代码符合:
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);
}
我收到此错误:
错误C2558:class&#39; SharedPointer&#39; :没有可用的复制构造函数 或复制构造函数已声明&#39;显式&#39;
SharedPointer标题:(所有方法都在标题中实现)
#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();
};
答案 0 :(得分:3)
问题是复制构造函数:
SharedPointer(SharedPointer<T>& sp);
不能仅用于复制const
指针。添加缺少的const
,一切都应该没问题:
SharedPointer(const SharedPointer& sp); // <T> is harmless, but unnecessary
(您还必须修复构造函数定义中的语法错误,并且应该将main
的返回类型更改为int
。删除using namespace std;
也是一个好主意。)
答案 1 :(得分:1)
您的复制构造函数已声明
SharedPointer(SharedPointer<T>& sp);
应该是这样的:
SharedPointer(const SharedPointer<T>& sp);
因此编译器将找到缺少的复制构造函数