C++ 使用模板类复制成员函数
我的会员功能有问题 我的目标是创建集合的副本,并返回指向它的指针C++ 使用模板类复制成员函数,c++,C++,我的会员功能有问题 我的目标是创建集合的副本,并返回指向它的指针 template <class T> class Set { public: Set(int length = 0); //Default constructor ~Set(); //Defualt Destructor
template <class T>
class Set
{
public:
Set(int length = 0); //Default constructor
~Set(); //Defualt Destructor
int size(); //Return how many elements are in set
bool contains(T test); //Searches set for T
bool add(T adding); //Adds T to set, repeats are denied
bool remove(T removing); //Attempts to remove T
T** elements(); //Returns a pointer to the set
T** copy(); //Creates a copy of the set, and returns a pointer to it
T &operator[](int sub); //Overload subscript
private:
T** set; //Pointer to first of set
int setSize; //Int holding amount of Elements available
int holding; //Elements used
void subError(); //Handles Subscript out of range
void adder(); //returns a copy with +1 size
};
模板
类集
{
公众:
Set(int length=0);//默认构造函数
~Set();//解除析构函数
int size();//返回集合中的元素数
bool包含(T test);//搜索T的集合
bool add(T adding);//将T添加到集合中,重复被拒绝
bool remove(T removing);//尝试删除T
T**elements();//返回指向集合的指针
T**copy();//创建集合的副本,并返回指向该集合的指针
T运算符[](int-sub);//重载下标
私人:
T**set;//指向集合第一个的指针
int setSize;//可用元素的int持有量
int holding;//使用的元素
void subError();//处理的下标超出范围
void adder();//返回大小为+1的副本
};
这是我的构造函数和复制函数:
template <class T>
Set<T>::Set(int length) //Default constructor
{
for(int i = 0; i < length; i++)
{
set[i] = new T;
}
setSize = length;
holding = 0;
}
template <class T>
T** Set<T>::copy() //Creates a copy of the set, and returns a pointer to it
{
T** setCopy;
for(int i = 0; i < setSize; i++)
{
setCopy[i] = new T;
*setCopy[i] = *set[i];
}
return setCopy;
}
模板
Set::Set(int-length)//默认构造函数
{
for(int i=0;i
有错误,我得到一个错误错误C4700:使用了未初始化的局部变量“setCopy”
和C4700:使用未初始化的局部变量“temp”
我已经尝试了各种解除干扰的方法,但是我没有取得任何进展。setCopy实际上是未初始化的…想想看 在
T**setCopy之后代码>
它指向何处?setCopy实际上未初始化…请考虑
在T**setCopy之后代码>
它指向哪里?这里有一些问题
首先,在使用变量之前,需要初始化setCopy
变量
T** setCopy = new (T*)[setSize]
也许是你想要的;这表示setCopy
指向指向-T
的setSize
指针数组。只有在这之后,您才能告诉它,setCopy
的任何成员都指向T
的数组。(您也需要在默认构造函数中执行同样的操作)
但是,如果您想要创建集合的副本,那么您应该编写一个复制构造函数和赋值运算符,而不是编写copy
方法,这样您就可以编写
Set<int> set2 = set1;
Set set2=set1;
让它做正确的事情 这里有一些问题
首先,在使用变量之前,需要初始化setCopy
变量
T** setCopy = new (T*)[setSize]
也许是你想要的;这表示setCopy
指向指向-T
的setSize
指针数组。只有在这之后,您才能告诉它,setCopy
的任何成员都指向T
的数组。(您也需要在默认构造函数中执行同样的操作)
但是,如果您想要创建集合的副本,那么您应该编写一个复制构造函数和赋值运算符,而不是编写copy
方法,这样您就可以编写
Set<int> set2 = set1;
Set set2=set1;
让它做正确的事情 确保该方法的前提是一个糟糕的想法,T**setCopy=new T*[setSize]
可能会让你更接近。还应该考虑使用<代码> SETCOMP[i] =新T(*(set [i]));是循环中唯一的语句,尽管如我所说,这个方法甚至不需要公开。如果目标是创建集合的副本,则创建集合的副本,而不仅仅是基础指针数组的快照。另外,这个类有动态成员,没有复制构造函数或赋值操作符重载,所以你实际上是在玩弄一个等待发生的意外。确保这个方法的前提是一个糟糕的想法,T**setCopy=new T*[setSize]
可能会让你更接近。还应该考虑使用<代码> SETCOMP[i] =新T(*(set [i]));是循环中唯一的语句,尽管如我所说,这个方法甚至不需要公开。如果目标是创建集合的副本,则创建集合的副本,而不仅仅是基础指针数组的快照。另外,这个类有动态成员,没有复制构造函数或赋值操作符重载,所以你实际上是在玩一个等待发生的意外代码>通过与[i]解除引用生成动态T?这让我好奇正常的一套是如何运作的;不会**setCopy指向一个指针,该指针setCopy[i]=new t代码>通过与[i]解除引用生成动态T?这让我好奇正常的一套是如何运作的;我懂了。。。是的,这是我第一次使用模板。我只想要一个可以传递到数组的指针,而不是一个指向数组的点。谢谢你的澄清。我应该能够完成它。@NarayanaJamesEmery:Tip:数组不是指针。指向数组的指针通常只是指向数组中第一个对象的指针。。。是的,这是我第一次使用模板。我只想要一个可以传递到数组的指针,而不是一个指向数组的点。谢谢你的澄清。我应该可以完成它。@NarayanaJamesEmery:提示:数组不是po