| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 610 人关注过本帖
标题:C++ 类 找错误
只看楼主 加入收藏
linw1225
Rank: 3Rank: 3
来 自:福建
等 级:论坛游侠
帖 子:110
专家分:145
注 册:2011-4-7
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:8 
C++ 类 找错误
#include<iostream>
using namespace std;
class Main
{
    protected:
  char *mainfood;
 public:
  Mian(char *name)
  {
   mainfood=name;
  }
};
class Sub
{
    protected:
  char *subfood;
 public:
  Sub(char *name)
  {
   subfood=name;
  }
};
class Menu:public Main,public Sub
{
    public:
  Menu(char *m,char *s):Main(m),Sub(s)
  { }

  void show();
};
void Menu::show()
{
 cout<<"主食="<<mainfood<<endl;
 cout<<"副食="<<subfood<<endl;
}
int main()
{
 Menu m("bread","steak");
 m.show();
 return 0;
}
请问这个程序哪里错了?
编译里面是划线部分出现错误,谁能解释下?
搜索更多相关主题的帖子: void include public 
2011-05-11 13:09
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:1 
class Main
{
    protected:
  char *mainfood;
public:
  Mian(char *name) <<--------------打错了吧?
  {
   mainfood=name;
  }
};

我们都在路上。。。。。
2011-05-11 13:43
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
少用多重继承。

我们都在路上。。。。。
2011-05-11 13:44
tisyang
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:132
专家分:737
注 册:2011-5-7
收藏
得分:0 
错误有2
第一: 基类 Main 的 构造函数名写错了,是 Main 不是 Mian;
第二: Main Sub 和 Menu 的构造函数参数不应该是 char * 而是 const char *
    原因 :你在 main 函数里提供的 Menu 构造参数 是 "bread" "steak" ,这些字面量字符串的类型是 const char * ,并不是 char *
    编译器不会自动去掉 变量的 const 属性。char * 型的实参 可以 用作 以const char *为形参的函数的参数,反之则不行。

C++ 用无参数构造函数生成对象时候请勿在构造函数后添加无用的那一对括号,否则有可能会被当成函数声明而忽略,嗯,栈上构建的时候就是这样。
2011-05-11 13:44
tisyang
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:132
专家分:737
注 册:2011-5-7
收藏
得分:0 
还有,你的 Main 类和 Sub 类的设计有问题,最好不要用 char * 来保存字符串作为类成员,因为你保存了的指针所指向的内存很有可能早就已经被释放了,你再访问的话就会发生不可预知的运行时错误。最好用  std:string 来保存字符串。

C++ 用无参数构造函数生成对象时候请勿在构造函数后添加无用的那一对括号,否则有可能会被当成函数声明而忽略,嗯,栈上构建的时候就是这样。
2011-05-11 13:48
linw1225
Rank: 3Rank: 3
来 自:福建
等 级:论坛游侠
帖 子:110
专家分:145
注 册:2011-4-7
收藏
得分:0 
回复 4楼 tisyang
能不能麻烦你在原代码的基础上修改下?

Einmal ist keinmal
2011-05-11 16:08
tisyang
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:132
专家分:737
注 册:2011-5-7
收藏
得分:9 
回复 6楼 linw1225
程序代码:
#include <iostream>
#include <string>
using namespace std;
class Main
{
protected:
  string mainfood;
public:
  Main(const string & name)
  {
   mainfood=name;
  }
};
class Sub
{
protected:
  string subfood;
public:
  Sub(const string & name)
  {
   subfood=name;
  }
};
class Menu:public Main,public Sub
{
public:
  Menu(const string & m,const string & s):Main(m),Sub(s)
  { }
  void show();
};
void Menu::show()
{
cout<<"主食="<<mainfood<<endl;
cout<<"副食="<<subfood<<endl;
}
int main()
{
Menu m("bread","steak");
m.show();
return 0;
}

C++ 用无参数构造函数生成对象时候请勿在构造函数后添加无用的那一对括号,否则有可能会被当成函数声明而忽略,嗯,栈上构建的时候就是这样。
2011-05-11 16:37
linw1225
Rank: 3Rank: 3
来 自:福建
等 级:论坛游侠
帖 子:110
专家分:145
注 册:2011-4-7
收藏
得分:0 
回复 7楼 tisyang
好吧,很感谢你。虽然还是不太懂,我自己再看看。
麻烦了。

Einmal ist keinmal
2011-05-11 21:18
linw1225
Rank: 3Rank: 3
来 自:福建
等 级:论坛游侠
帖 子:110
专家分:145
注 册:2011-4-7
收藏
得分:0 
回复 7楼 tisyang
我自己改了下代码,对了,你可以看看。
#include<iostream>
#include<string>
using namespace std;
class Main
{
    protected:
  char *mainfood;
public:
  Main(char *name)
  {
   mainfood=new char[strlen(name)+1];
   strcpy(mainfood,name);

  }
};
class Sub
{
    protected:
        char *subfood;
    public:
  Sub(char *name)
  {
   subfood=new char[strlen(name)+1];
   strcpy(subfood,name);

  }
};
class Menu:public Main,public Sub
{
    public:
  Menu(char *m,char *s):Main(m),Sub(s)
  { }
  void show();
};
void Menu::show()
{
cout<<"主食="<<mainfood<<endl;
cout<<"副食="<<subfood<<endl;
}
int main()
{
Menu m("bread","steak");
m.show();
return 0;
}

Einmal ist keinmal
2011-05-11 22:39
快速回复:C++ 类 找错误
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032250 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved