g++ 3.4.3

原创 2005年03月03日 13:37:00

近来公司的事情比较多,都没有时间来blog写写东西了。

近来公司其中一个项目需要程序在g++ 3.4.3下编译,而源代码在g++ 3.2.3下面一个Warning都没有,但是在3.4.3下则一堆Error了。后来发现原来g++ 3.4.3严格了很多。其中“出问题”最多的是这种情况:

class TObjBase
{
public:
    TObjBase(void) : m_nVal(0) {}
    ~TObjBase(void) {}

    int getVal(void) const { return m_nVal; }
    void setVal(int n) { m_nVal = n; }
protected:
    int    m_nVal;
};

template<class typeObj>
class TExtObj : public typeObj
{
public:
    TExtObj(void) : typeObj() {}

    int getExtVal(void) const { return getVal() + 100; }
};

这是一种比较常见的应用,Adapter和Decorator模式都会用到这种技术。但问题在于g++ 3.4.3却说int getExtVal(void) const { return getVal() + 100; }这一行错误,getVal()找不到。

的确,单以TExtObj这个类看来,怎么也是找不到getVal()的定义在哪里。g++ 3.2.3以及VC6、VC7等,均以十分相信开发者的态度猜测这个函数必定在其他地方定义了,有可能是外部独立的函数、有可能是typeObj的成员函数。但g++ 3.4.3却非要程序员很负责任的告诉编译器,究竟是哪一个getVal(),于是解决方法:
方法一:
int getExtVal(void) const { return typeObj::getVal() + 100; }

或者


方法二:
int getExtVal(void) const { return this->getVal() + 100; }

当然,如果是外部的独立函数,那就是:

int getExtVal(void) const { return ::getVal() + 100; }

然而,在getVal()是虚函数的时候,方法一和方法二是有区别的,这个是需要十分小心的事情。方法一是无论什么时候都会调用typeObj的getVal(),方法二是调用当前类最适合的虚函数getVal()。

相关文章推荐

CentOS 6.6 安装RabbitMQ3.4.3

1.安装python2.7和erlang环境 A.CentOS 6.6 安装python2.7  B. 2.安装RabbitMQ3.4.3 //安装依赖 yum -y install xmlto ...

usaco training 3.4.3 fence9 题解

前言:咳咳,正当我向大视野、PKU等众多题库征战的时候,我猛然发现最最经典的USACO原题我竟然还没有刷完!!!于是最近我要把这个刷到5、6版,并且会陆续写一些题解。(水题就不解释了)...

JEECG Framework 3.4.3 GA 版本发布

JEECG 微云快速开发平台 (JEECG开源平台 - 云平台SAAS企业应用在线开发与微信移动应用) JEECG Framework 3.4.3-GA版本发布...

Hadoop伪分布式环境搭建(hadoop-0.20.2、hive-0.11.0、pig-0.5.0、zookeeper-3.4.3)

一.安装虚拟机及前期准备 1.      VMWare 下安装CentOS 6.0系统,网络制式采用NAT 2.      将hadoop添加到sudoers su  root 输入root的...
  • cyw1900
  • cyw1900
  • 2014年05月08日 17:32
  • 696

hbase的安装与配置(zookeeper3.4.3,hbase0.94.1,hadoop1.03)

安装zookeeper(zookeeper也可以托管给hbase,测试环境可以这样做,生产上不建议) 1.解压zookeeper tar –zxvf zookeeper-3.4.3.tar.gz ...

xen3.4.3源码编译

xen3.4.3源码编译 1. Xen Hypervisior安装 安装必备软件包 # yum groupinstall "Development Tools" # yum insta...

3.4.3 循环队列之静态存储空间(2)

在循环队列中,队尾指针可能小于队头指针。 入队指针时,队尾指针加一。 当队列满时,队尾指针等于对头指针,和队列空的条件是一样的。 为了区分队满与队空,在循环队列中,少用一个存储单元,也就是在最大...
  • sjmping
  • sjmping
  • 2012年11月07日 22:27
  • 1379

python 3.4.3 下载安装与环境配置

下载: 我的操作系统是Windows 7,刚开始下载是Python 2.7后来因为要装PyQt5要下载 Python 3.5,由于个人系统的问题Python 3.5暂时无法使用,故选择了Python ...

USACO/fence9 3.4.3

一个简单的题,没什么算法有的话估计就是积分思想吧。 但是别的题解说有定理的,我没有用,这题数据小,我这个 O(n)的就行了。 #include #include /*枚举横坐标,然后看纵坐标...
  • zwfars
  • zwfars
  • 2013年05月25日 09:01
  • 275

USACO 3.4.3 American Heritage

American Heritage Farmer John takes the heritage of his cows very seriously. He is not, however, ...
  • zkzxmzk
  • zkzxmzk
  • 2013年09月16日 16:28
  • 506
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:g++ 3.4.3
举报原因:
原因补充:

(最多只允许输入30个字)