warning C4250: “MyClassD”: 通过域控制继承“MyClassC::MyClassC::MyMethod”

warning C4250: “MyClassD”: 通过域控制继承“MyClassC::MyClassC::MyMethod”

菱形继承的警告,如下代码所示:

#include <stdio.h>
#include <string> 

class MyClassA
{
public:
        virtual void MyMethod() = 0;
};

 

class MyClassB : virtual public MyClassA
{

};

 
class MyClassC : virtual public MyClassA
{
public:
        virtual void MyMethod()
         {
                   printf("Hello, World!\n");
         }
};

 

class MyClassD : virtual public MyClassB, virtual public MyClassC
{

public:

};

 int main(int argc, char* argv[])
{
         MyClassD myClassD;

         myClassD.MyMethod();

 
         return 0;

}


[问题如下]

会报如下两个错误:

1>e:\e\c++\201212\staticobjectdemo\staticobjectdemo\staticobjectdemo.cpp(49): warning C4250: MyClassD:通过域控制继承“MyClassC::MyClassC::MyMethod

1>e:\e\c++\201212\staticobjectdemo\staticobjectdemo\staticobjectdemo.cpp(40) : 参见“MyClassC:: MyMethod”的声明

查了下,没有更好的消除解决的方法,笔者认为这是由于菱形继承的特征性所决定的。

解决方案:

一般下可以通过以下方法消除警告!

#pragma warning(push)

#pragma warning(disable:4250) //显然此处的警告号为4250,其他的警告换相对应的编号即可。

……….           //此处加上对应的语句,注意一定要保证弹出警告的语句在diable:4250后,在pop前!

#pragma warning(pop)

扩展:

msdn#pragma warning含义——允许选择性的更改编译警告消息的行为。

使用形式如下

#pragma warning( warning-specifier : warning-number-list [; warning-specifier : warning-number-list...] )

#pragma warning( push[ ,n ] )

#pragma warning( pop )

warning-specifier警告标识符如下:

Warning-specifier

含义

1, 2, 3, 4

应用于给定指定警告的级别,也用来使指定的缺省的警告关闭。

default

重置警告行为为其缺省值,也能用于将缺省的警告关闭。这个警告缺省的产生。

disable

不再弹出指定编号的的警告消息。用法:#pragma warning(disable:4250)

error

把指定的警告消息报告称为错误(Error)

once

仅显示指定的警告消息一次。

suppress

 

pragma的当前状态放置入栈,使得下一行的指定的警告不起作用,然后弹出警告栈,重置pragma状态。你只能对每一个suppress指示器指定一次警告,不能指定多个并且,suppress仅支持C6000的警告(代码分析警告),该警告可通过编译选项使其有效。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

铭毅天下

和你一起,死磕Elastic!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值