注册 登录
编程论坛 C++教室

求教多重继承的二义性问题

hmsabc 发布于 2010-08-11 11:47, 646 次点击
程序代码:
#include <iostream>
using namespace std;

class A
{
public:
    int a;
    void display( );
};

class B
{
public:
    int a;
    void display( );
};

class C :public A,public B
{
public:
    int b;
    void show( );
};

int main( )
{
    int m,n;
    C c1;
    c1.A::a = 3;
    c1.B::a = 8;
    c1.A::display( );
    c1.B::display( );
    return 0;
}
    上面的程序是谭浩强《C++程序设计》一书中的举例(P376页),按书中所说,这个程序应该可以运行,但实际上不能通过编译,问题就出在倒数的第三行(倒数第二行性质一样),我真不理解对象 c1 能访问基类数据,用同样的方法对象 c1 却不能访问基类的函数,虽然是同名函数,但是已经指明了所属的类呀。为什么?
5 回复
#2
promising2010-08-11 13:08
原来的写错了~

[ 本帖最后由 promising 于 2010-8-11 13:09 编辑 ]
#3
promising2010-08-11 13:15
回复 楼主 hmsabc
你的程序直接运行,编译不通过,但是把  函数体  加进去后就能运行了~
#4
pangding2010-08-11 16:52
不是这么搞笑吧……

楼主你编译器报的错是什么?函数没定义嘛……
#5
hmsabc2010-08-11 18:59
回复 4楼 pangding
就是这么搞笑!是没有定义,见笑了。刚学嘛,稀里糊涂的,什么也不晓得,什么也不明白。但我相信在你们的鼓励之下,我很快就会搞清楚的。

[ 本帖最后由 hmsabc 于 2010-8-11 19:00 编辑 ]
#6
pangding2010-08-11 23:16
呵呵,没事,刚学什么错误都有可能犯。我最近还犯过 if 里的 == 写成 = 呢,看了半天才看出来~

不过一般有語法错误的时候最简单,看看错误提示一般很快就排除了,所以有学会看编译器的提示。
语义错误比较麻烦,就是说語法是正确的,只是它干的不是你想让它干的,比如我刚说的那个例子。
1