作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
看下面的代码。它有什么问题?编译器给出了这个错误:
In copy constructor
person::person(person&)':
person::copy(char*&, char*&)' candidates are: void person::copy(char*&, const char*&) "
No matching function for call to
代码如下:
class person
{
public:
person();
person(person &);
private:
void copy(char*&,const char*&);
char* name, *fathername,* address;
};
void person::copy( char*& n, const char*& p)
{
int result;
result=strcmp(n,p);
if(result!=0)
{
n=new char[strlen(p)+1];
strcpy(n,p);
n[strlen(p)]='\0';
}
}
person::person(person &object)
{
copy(name,object.name);
copy(fathername,object.fathername);
copy(address, object.address);
}
从这个问题的答案中,我到目前为止的理解是:编译器不允许将引用转换为常量引用,因为引用已经是常量。它们不能像指针那样指向不同的内存位置。我说得对吗?
最佳答案
这不是更好吗?
class person
{
private:
std::string name;
std::string fathername
std::string address;
};
// constructor and copy constructor autogenerated!
这样更像“C++”;)。
关于C++ 编译器错误 : No matching function for call,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2112367/
我是一名优秀的程序员,十分优秀!