#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
struct NoName
{
NoName():pstring(new string),i(0),d(0) { }
NoName(const NoName &temp)
{
cout<<"载入拷贝构造函数"<<endl;
pstring=new string;
*pstring=*(temp.pstring);
i=temp.i;
d=temp.d;
}
~NoName()
{
cout<<"载入析构函数!"<<endl;
delete [] pstring;
cin.get();
}
void show();
private:
string *pstring;
int i;
double d;
};
void NoName::show()
{
cout<<pstring<<endl;
}
int main()
{
NoName abc("asdf");
NoName b=abc;
b.show();
return 0;
}
出现编译错误 错误 1 error C2664: “NoName::NoName(const NoName &)”: 不能将参数 1 从“const char [5]”转换为“const NoName &” d:\cplusplus\primer\primeroct29\primeroct29\primeroct29.cpp 44
究竟是什么原因啊?难道我这样初始化有问题吗?求大侠相助!谢谢!
7 个解决方案
#1
NoName(const NoName &temp)
NoName abc("asdf");
看看区别
NoName abc("asdf");
看看区别
#2
如果要使程序运行
可以 NoName(char *str)定义一个这样的构造函数
另:到目前还没见过可以 new string的,建议换成char试试
可以 NoName(char *str)定义一个这样的构造函数
另:到目前还没见过可以 new string的,建议换成char试试
#3
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
struct NoName
{
NoName():pstring(new string),i(0),d(0) { }
NoName(const string &temp)
{
cout<<"载入构造函数"<<endl;
pstring=new string;
//*pstring=*(temp.pstring);
*pstring = temp;
//i=temp.i;
//d=temp.d;
}
NoName(const NoName &temp)
{
cout<<"载入拷贝构造函数"<<endl;
pstring=new string;
*pstring=*(temp.pstring);
i=temp.i;
d=temp.d;
}
~NoName()
{
cout<<"载入析构函数!"<<endl;
delete pstring;
cin.get();
}
void show();
private:
string *pstring;
int i;
double d;
};
void NoName::show()
{
cout<< *pstring << endl;
}
int main()
{
NoName abc("asdf");
NoName b=abc;
b.show();
return 0;
}
#4
多谢2位相助,这真的明白了构造函数和拷贝构造函数应该如何写,尤其是getline大侠,多谢!!
#5
NoName abc("asdf");
这个地方的absf不是一个NoName类的对象 而是一个字符串
这个地方的absf不是一个NoName类的对象 而是一个字符串
#6
#include <iostream>
#include <string>
using namespace std;
struct NoName
{
NoName( string *str ):pstring( str ),i(0),d(0) { }
NoName(const NoName &temp)
{
cout<<"载入拷贝构造函数"<<endl;
pstring=new string;
*pstring=*(temp.pstring);
i=temp.i;
d=temp.d;
}
~NoName()
{
cout<<"载入析构函数!"<<endl;
delete pstring;
cin.get();
}
void show();
private:
string *pstring;
int i;
double d;
};
void NoName::show()
{
cout<<*pstring<<endl;
}
int main()
{
string a("sdfsdfa");
string *str;
str = new string;
str = &a;
NoName abc(str);
NoName b=abc;
b.show();
return 0;
}
#7
拷贝构造函数只有一个,但其它构造函数可以有多个(重载实现),因此一般你要传什么参数给构造函数,就应该编写相应的重载形式;
另,析构函数中 delete [] pstring; 做法不对,要使用相同形式的new和delete版本(这里应该是delete pstring)。
另,析构函数中 delete [] pstring; 做法不对,要使用相同形式的new和delete版本(这里应该是delete pstring)。
#1
NoName(const NoName &temp)
NoName abc("asdf");
看看区别
NoName abc("asdf");
看看区别
#2
如果要使程序运行
可以 NoName(char *str)定义一个这样的构造函数
另:到目前还没见过可以 new string的,建议换成char试试
可以 NoName(char *str)定义一个这样的构造函数
另:到目前还没见过可以 new string的,建议换成char试试
#3
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
struct NoName
{
NoName():pstring(new string),i(0),d(0) { }
NoName(const string &temp)
{
cout<<"载入构造函数"<<endl;
pstring=new string;
//*pstring=*(temp.pstring);
*pstring = temp;
//i=temp.i;
//d=temp.d;
}
NoName(const NoName &temp)
{
cout<<"载入拷贝构造函数"<<endl;
pstring=new string;
*pstring=*(temp.pstring);
i=temp.i;
d=temp.d;
}
~NoName()
{
cout<<"载入析构函数!"<<endl;
delete pstring;
cin.get();
}
void show();
private:
string *pstring;
int i;
double d;
};
void NoName::show()
{
cout<< *pstring << endl;
}
int main()
{
NoName abc("asdf");
NoName b=abc;
b.show();
return 0;
}
#4
多谢2位相助,这真的明白了构造函数和拷贝构造函数应该如何写,尤其是getline大侠,多谢!!
#5
NoName abc("asdf");
这个地方的absf不是一个NoName类的对象 而是一个字符串
这个地方的absf不是一个NoName类的对象 而是一个字符串
#6
#include <iostream>
#include <string>
using namespace std;
struct NoName
{
NoName( string *str ):pstring( str ),i(0),d(0) { }
NoName(const NoName &temp)
{
cout<<"载入拷贝构造函数"<<endl;
pstring=new string;
*pstring=*(temp.pstring);
i=temp.i;
d=temp.d;
}
~NoName()
{
cout<<"载入析构函数!"<<endl;
delete pstring;
cin.get();
}
void show();
private:
string *pstring;
int i;
double d;
};
void NoName::show()
{
cout<<*pstring<<endl;
}
int main()
{
string a("sdfsdfa");
string *str;
str = new string;
str = &a;
NoName abc(str);
NoName b=abc;
b.show();
return 0;
}
#7
拷贝构造函数只有一个,但其它构造函数可以有多个(重载实现),因此一般你要传什么参数给构造函数,就应该编写相应的重载形式;
另,析构函数中 delete [] pstring; 做法不对,要使用相同形式的new和delete版本(这里应该是delete pstring)。
另,析构函数中 delete [] pstring; 做法不对,要使用相同形式的new和delete版本(这里应该是delete pstring)。