小编use*_*802的帖子

具有相同名称的纯虚函数的不同实现

可能重复:
继承共享方法名称的接口

我有两个基类I1I2纯虚函数void R() = 0;.我想在派生类IImpl要继承I1I2并有不同的实现方式为I1::R()I2::R().

下面的代码在MS VS 2005和2010中编译和工作.我在禁用语言扩展并且在警告级别4上进行编译.没有警告也没有错误.

我在gcc 4.2中尝试了相同的代码.它不编译.GCC报告错误:

error: cannot define member function 'I1::R' within 'IImpl'
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 为什么代码在MS VS中工作以及为什么它在gcc中不起作用?
  2. 代码是标准C++吗?
  3. 实现它的正确方法是什么,所以它是一个标准的C++并在VS和gcc上编译?

谢谢!

#include <stdio.h>

class I1
{
public:
    virtual void R() = 0;
    virtual ~I1(){}
};

class I2
{
public:
    virtual void R() = 0;
    virtual ~I2(){}
};

class IImpl: public I1, public I2
{
public:

    virtual void I1::R()
    {
        printf("I1::R()\r\n"); …
Run Code Online (Sandbox Code Playgroud)

c++ gcc visual-c++

6
推荐指数
2
解决办法
2333
查看次数

标签 统计

c++ ×1

gcc ×1

visual-c++ ×1