CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  新手乐园

程序运行出错

楼主yuchen2006(雨晨)2006-03-19 08:54:24 在 C/C++ / 新手乐园 提问

#include<iostream.h>  
  #include<string.h>  
  class   name  
  {  
  char   *neirong;  
  int   g;  
  public:  
  void   nei()  
  {  
  this->g=strlen(this->neirong);  
  neirong=new   char[g+1];  
  }  
  void   shuru()  
  {  
  cin>>neirong;  
  cout<<endl;  
   
  }  
  //name(name   &   h);  
  friend   name   operator   +   (name   &x,name   &m);  
  void   display()  
  {  
  cout<<"您的姓名是:"<<neirong;  
  }  
  void   s()  
  {  
   
  }  
  };  
          name   operator   +   (name   &x,name   &m)  
  {  
                  name   temp;  
  temp.g=x.g+m.g;  
  temp.neirong=new   char[temp.g+1];  
  strcpy(temp.neirong,x.neirong);  
  strcat(temp.neirong,m.neirong);  
  return(temp);  
  }  
  void   main()  
  {  
          name   x;  
  name   m;  
  name   xm;  
  cout<<"请输入姓:";  
          x.shuru();  
  cout<<"请输入名:";  
  m.shuru();  
  x.nei();  
  m.nei();  
          xm=x+m;  
          xm.display();  
  }  
   
  让用户输入姓和名,然后将姓名显示在屏幕上  
  我想输入完姓和名在开内存,然后将两个对象中的字符串加在一起。编译没问题,运行时当输入姓后一回车出错。 问题点数:30、回复次数:8Top

1 楼yjm0105(流云)回复于 2006-03-19 09:14:44 得分 3

char   *s;//没有为它申请空间之前是不能接受输入的  
  cin>>s;//ERRORTop

2 楼ugg(逸学堂(exuetang.net))回复于 2006-03-19 09:59:37 得分 5

char   *neirong;  
  int   g;  
  lz   用string变量代替char   *neirong;  
  string   neirong;  
  这样开辟内存都有string类来做,非常简单。  
   
  Top

3 楼yleiou(单刀匹马)回复于 2006-03-19 10:12:36 得分 3

return(temp);   也有错   返回的是局部变量Top

4 楼aniude(重返荣耀)回复于 2006-03-19 11:20:16 得分 5

#include<iostream>  
  #include<string.h>  
  using   namespace   std;  
  class   name  
  {  
  char   *neirong;  
  int   g;  
  public:  
  void   nei()  
  {  
  g=strlen(neirong);  
  //neirong=new   char[g+1];  
  }  
  void   shuru()  
  {  
  char   *tmp=new   char[100];  
  cin>>tmp;  
  if(tmp!=NULL){  
  neirong=new   char[strlen(tmp)+1];  
  strcpy(neirong,tmp);  
  }  
  cout<<endl;  
   
  }  
  //name(name   &   h);  
  friend   name   operator   +   (name   &x,name   &m);  
  void   display()  
  {  
  cout<<"您的姓名是:"<<neirong;  
  }  
  void   s()  
  {  
   
  }  
  };  
          name   operator   +   (name   &x,name   &m)  
  {  
                  name   temp;  
  temp.g=x.g+m.g;  
  temp.neirong=new   char[temp.g+1];  
  strcpy(temp.neirong,x.neirong);  
  strcat(temp.neirong,m.neirong);  
  return   temp;  
  }  
  void   main()  
  {  
          name   x;  
  name   m;  
  name   xm;  
  cout<<"请输入姓:";  
          x.shuru();  
  cout<<"请输入名:";  
  m.shuru();  
  x.nei();  
  m.nei();  
          xm=x+m;  
          xm.display();  
  }  
  -----  
  改了下,能执行了Top

5 楼yuchen2006(雨晨)回复于 2006-03-21 15:43:18 得分 0

还有个程序  
  #include<iostream.h>  
  #include<string.h>  
  class   A  
  {  
  char   *p;  
  int   g;  
  public:  
  A(char   *pp)  
  {  
                g=strlen(pp);  
                p=new   char[g+1];  
        *p=*pp;  
  }  
  ~A()  
  {  
  delete   p;  
  }  
   
  };  
  class   B  
  {  
  char   *x;  
  int   gg;  
  public:  
  B()  
  {  
  gg=0;  
  x=new   char;  
  }  
          B(char*xx)  
  {  
                gg=strlen(xx);  
                x=new   char[gg+1];  
        *x=*xx;  
  }  
  ~B()  
  {delete   x;}  
   
  };  
  void   main()  
  {  
  A   a("患难时的朋友");  
  B   b("是真正的朋友!");  
  B   c;  
  c=a+b;  
  }  
  问题:不同类的对象相加如何实现??c=a+b   c和b都是B类的,a是A类的,应该怎么做才能让结果等于     “患难时的朋友是真正的朋友”Top

6 楼jixingzhong(瞌睡虫·星辰)回复于 2006-03-21 17:17:25 得分 3

重载   +   操作   ....Top

7 楼yuchen2006(雨晨)回复于 2006-03-22 18:14:30 得分 0

#include<iostream.h>  
  #include<string.h>  
  class   B;  
  class   A  
  {  
  char   *p;  
  int   g;  
  public:  
  A()  
  {  
  p=new   char;  
  g=0;  
  }  
  A(char   *pp)  
  {  
                g=strlen(pp);  
                p=new   char[g+1];  
        *p=*pp;  
  }  
  ~A()  
  {  
  delete   p;  
  }  
          friend   A   operator   +   (B   &b,A   &a);  
  };  
  class   B  
  {  
  char   *x;  
  int   gg;  
  public:  
  B()  
  {  
  gg=0;  
  x=new   char;  
  }  
          B(char*xx)  
  {  
                gg=strlen(xx);  
                x=new   char[gg+1];  
        *x=*xx;  
  }  
  ~B()  
  {delete   x;}  
  friend   A   operator   +   (B   &b,A   &a);  
  };  
  A   operator   +(B   &b,A   &a)  
  {  
        A   duixiang;  
        duixiang.g=b.gg+a.g;  
        duixiang.p=new   char[duixiang.g+1];  
        strcpy(duixiang.p,a.p);  
        strcat(duixiang.p,b.x);  
        return(duixiang);  
  }  
  void   main()  
  {  
  A   a("患难时的朋友");  
  B   b("是真正的朋友!");  
  B   c;  
  c=a+b;  
  }  
  有个错误,error   C2678:   binary   '+'   :   no   operator   defined   which   takes   a   left-hand   operand   of   type   'class   A'   (or   there   is   no   acceptable   conversion)  
  什么意思??Top

8 楼benlei999(醉明月)回复于 2006-03-22 20:56:25 得分 11

你调用+重载函数的参数不对  
  friend   A   operator   +   (B   &b,A   &a);  
  c=a+b;//a   是A,而b   是B,反了。  
  **************  
  还有很多错,比如没有拷贝构造函数,没有赋值函数,构造函数不好用啊...总之有点乱哈。我改了一下,写得不是很规整哈!  
  *****************************************  
  #include   "stdafx.h"  
  #include<iostream.h>  
  #include<string.h>  
  class   B;  
  class   A  
  {  
  public:  
  char   *p;  
  int   g;  
  public:  
  A()  
  {  
  p=new   char;  
  g=0;  
  }  
  A(int   n)  
  {  
  p=new   char[n];  
  g=n-1;  
  }  
  A(char   *pp)  
  {  
                g=strlen(pp);  
                p=new   char[g+1];  
        strcpy(p,pp);  
        *p=*pp;  
  }  
  A(A   &a)  
  {  
  p=new   char[a.g+1];  
  strcpy(p,a.p);  
  }  
  void   operator   =(A   &b)  
  {  
  strcpy(p,b.p);  
  }  
  ~A()  
  {  
  delete   []   p;  
  }  
          friend   A   operator   +   (B   &b,A   &a);  
  };  
  class   B  
  {  
  char   *x;  
  int   gg;  
  public:  
  B()  
  {  
  gg=0;  
  x=new   char;  
  }  
          B(char   *xx)  
  {  
                gg=strlen(xx);  
                x=new   char[gg+1];  
        strcpy(x,xx);  
  }  
  ~B()  
  {delete   x;}  
  friend   A   operator   +   (B   &b,A   &a);  
  };  
  A   operator   +(B   &b,A   &a)  
  {  
        A   duixiang(b.gg+a.g+1);  
        strcpy(duixiang.p,a.p);  
        strcat(duixiang.p,b.x);  
        return(duixiang);  
  }  
   
  void   main()  
  {  
  A   a("患难时的朋友");  
  B   b("是真正的朋友!");  
  A   c(50);  
  c=b+a;  
  cout<<c.p<<endl;  
  }  
  Top

相关问题

  • 程序运行出错后的问题
  • 菜问题:dx程序运行出错
  • 98下程序运行出错!!
  • 救命!程序运行出错..............
  • 此程序为何会运行出错?
  • 程序运行出错问题?
  • 为何给BOOL型变更赋值,出错(程序运行出错)在线等!!!
  • 运行出错
  • 运行出错
  • 运行出错

关键词

  • 函数
  • duixiang
  • neirong
  • gg
  • pp
  • strlen
  • strcpy
  • xx
  • 朋友
  • operator

得分解答快速导航

  • 帖主:yuchen2006
  • yjm0105
  • ugg
  • yleiou
  • aniude
  • jixingzhong
  • benlei999

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo