Chinaunix

标题: 这个构造函数该怎么写 [打印本页]

作者: zh_manyu    时间: 2005-11-16 03:42
标题: 这个构造函数该怎么写

  1. class String
  2. {
  3. public:
  4.         String(const char *str=NULL);
  5. private:
  6.         char *d_name;
  7. }
  8. String::String(const char *str=NULL)
  9. {
  10. }
复制代码


String::String(const char *str=NULL)
{
        d_name=new char[sizeof(str)];
        strcpy(d_name,str);
}
我这样写在VC下调试报错为:
'String::String' : constructors not allowed a return type
'String::String' : redefinition of default parameter : parameter 1
这时候构造函数有返回类型吗 返回的是什么类型
作者: 柳五随风    时间: 2005-11-16 04:47
class String
{
public:
        String(const char *str=NULL);
private:
        char *d_name;
}
String::String(const char *str)
{
}
作者: gooderfeng    时间: 2005-11-16 08:42
class String
{
public:
        String(const char *str=NULL);
private:
        char *d_name;
};
这样吧.这里没环境
作者: zh_manyu    时间: 2005-11-16 11:02
原帖由 柳五随风 于 2005-11-16 04:47 发表
class String
{
public:
        String(const char *str=NULL);
private:
        char *d_name;
}
String::String(const char *str)
{
}

这样的话
'String::String' : redefinition of default parameter : parameter 1
没有了不过constructors not allowed a return type还是存在
可以讲讲为什么吗他编译器是在告诉我我重新定义了默认参数?
作者: zh_manyu    时间: 2005-11-16 11:05
标题: 回复 3楼 gooderfeng 的帖子
我 不懂你的意思
作者: whyglinux    时间: 2005-11-16 11:31
原帖由 zh_manyu 于 2005-11-16 11:02 发表

这样的话
'String::String' : redefinition of default parameter : parameter 1
没有了不过constructors not allowed a return type还是存在
可以讲讲为什么吗他编译器是在告诉我我重新定义了默认参数?

  1. class String
  2. {
  3. public:
  4.         String(const char *str=NULL);
  5. private:
  6.         char *d_name;
  7. }; // <-- 不要忘了类定义之后的 ;
  8. String::String(const char *str)
  9. {
  10. }
复制代码

作者: victoria123456    时间: 2005-11-16 11:32
标题: 回复 1楼 zh_manyu 的帖子
String::String(const char *str)
{
        d_name=new char[sizeof(str)];
        strcpy(d_name,str);
}
不要再对str赋值了
作者: gooderfeng    时间: 2005-11-16 11:33
String::String(const char *str)
{
        d_name=new char[sizeof(str)];
        strcpy(d_name,str);
}

很基本的问题,一个class结尾有结束';'
在定义的时候为什么还要给负值啊
作者: zh_manyu    时间: 2005-11-16 11:42
谢谢各位 初学C++
还请各位海涵
作者: 柳五随风    时间: 2005-11-16 12:15
标题: 回复 4楼 zh_manyu 的帖子

另外,我从copy过来的代码;丢掉了,莫名其妙.
作者: 柳五随风    时间: 2005-11-16 12:18
原帖由 柳五随风 于 2005-11-16 04:47 发表
class String
{
public:
        String(const char *str=NULL);
private:
        char *d_name;
}
String::String(const char *str)
{
}




--------------------------------------------------------------------------------


另外,我从copy过来的代码;丢掉了,莫名其妙.
作者: yarco1    时间: 2005-11-16 12:23
觉得似乎应该这样子...

  1. class String
  2. {
  3. public:
  4.         String(const char*);
  5. private:
  6.         char *d_name;
  7. };

  8. String::String(const char *str=NULL)
  9. {
  10. }
复制代码

作者: 柳五随风    时间: 2005-11-16 12:25
原帖由 yarco1 于 2005-11-16 12:23 发表
觉得似乎应该这样子...

  1. class String
  2. {
  3. public:
  4.         String(const char*);
  5. private:
  6.         char *d_name;
  7. };

  8. String::String(const char *str=NULL)
  9. {
  10. }
复制代码



别觉得了照我说的做--kidding
另外如果class之间有继承关系,千万别default,小心搞死人.
作者: zh_manyu    时间: 2005-11-16 13:42

谢谢LS提醒我会记下的




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2