我想为此类RNA创建一个复制构造函数,以从另一个对象RNA复制详细信息
#include "RNA.h"
#include"Sequence.h"
#include<bits/stdc++.h>
using namespace std;
RNA::RNA()
{
set_sequence();
}
RNA::RNA(char * seq, RNA_Type atype)
{
int x;
int i=0;
while(1)
{
if(seq[i] != 'C'&&seq[i] != 'G'&&seq[i] != 'A'&&seq[i] != 'U')break;
x++;
i++;
}
x--;
length = x;
this->seq = new char[length];
for(int i=0;i<length;i++)
{
this->seq[i] = seq[i];
}
type = atype;
}
这是副本构造函数
RNA::RNA( RNA& rhs)
{
seq = new char[length];
for(int i=0;i<length;i++)
{
seq[i] = rhs.seq[i];
}
type = rhs.type;
}
主要是我尝试这样做并导致错误
int l;
cin>>l;
char* arr = new char[l];
for(int i=0;i<l;i++)
{
cin>>arr[i];
}
cin>>l;
RNA anas(arr,(RNA_Type)l);
int s;
cin>>s;
char* arr2 = new char[s];
for(int i=0;i<s;i++)
{
cin>>arr2[i];
}
cin>>s;
RNA saeed(arr2,(RNA_Type)s);
saeed(anas); error is here
saeed.Print();
错误为“无法匹配'(RNA)(RNA&)'的调用 所以我该怎么做才能解决此错误
答案 0 :(得分:1)
最简单的方法是让编译器为您完成。
class RNA
{
RNA_Type type;
std::string seq;
public:
RNA(std::string = /* default seq */, RNA_Type = /* default type */);
/* implicitly generated correctly
~RNA();
RNA(const RNA &);
RNA & operator = (const RNA &);
RNA(RNA &&);
RNA & operator = (RNA &&);
*/
// other members
};
RNA::RNA(std::string aseq, RNA_Type atype)
: seq(aseq.begin(), aseq.find_first_not_of("ACGT")), type(atype)
{}
答案 1 :(得分:0)
saeed
当时已经存在,您正在尝试像使用它一样使用它。
除了正在构造时,您无法复制构造,并且看起来像其他初始化:
RNA saeed(anas);
或:
RNA saeed{anas};
如果要替换已经存在的对象的值,请使用赋值(并且需要实现该赋值;请参阅The Rule Of Three。)
答案 2 :(得分:0)
行
saeed(anas);
不是对构造函数RNA::RNA(RNA const&)
的调用,而是对RNA::operator()(RNA const&)
的调用,该调用不存在。
您大概想要的是副本分配运算符
RNA& RNA::operator=(RNA const&);
对于足够简单的类,将由编译器自动生成(如Caleth的回答所述)。要调用它,请用
替换您的行saeed = anas;