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()。

RHEL7解决无法使用YUM源问题

RHEL7解决无法使用YUM源问题 RHEL的YUM源需要注册用户才能更新使用,由于CentOS和RHEL基本没有区别,并且CentOS已经被REHL收购。所以将RHEL的YUM源替换为CentO...
  • zhaosenoo
  • zhaosenoo
  • 2017年04月28日 17:02
  • 5853

R-3.2.4源码安装、RStudioServer安装及快捷安装方法

R-3.2.4源码安装与RStudioServer安装   不同的R版本出现的问题略有不同,本文给出了R-3.2.4源码安装时,一些问题的解决策略! 一、文件共享技术 step0: 主机下...
  • u010035907
  • u010035907
  • 2016年04月03日 16:38
  • 2894

Linux下基于bitnami的Redmine安装部署以及结合Subversion的设置

前期准备: 1.bitnami-redmine-3.1.1-1-linux-x64-installer.run  2.虚拟机安装好Centos 7 下面开始正式部署: 一、安装bitn...
  • u011523533
  • u011523533
  • 2015年10月10日 14:55
  • 1777

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 ...
  • only09080229
  • only09080229
  • 2015年01月29日 19:30
  • 1076

usaco training 3.4.3 fence9 题解

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

JEECG Framework 3.4.3 GA 版本发布

JEECG 微云快速开发平台 (JEECG开源平台 - 云平台SAAS企业应用在线开发与微信移动应用) JEECG Framework 3.4.3-GA版本发布...
  • zhangdaiscott
  • zhangdaiscott
  • 2014年02月16日 22:26
  • 5093

3.4.3 循环队列--------队列的顺序表示与实现(1)

队列的顺序表示为什么要采用循环方式呢?首先分析非循环顺序队列的表示和实现以及他们存在的问题。  /* c3-5.h 队列的顺序存储结构(非循环队列,队列头元素在[0]单元) */  #define...
  • sjmping
  • sjmping
  • 2012年11月07日 22:26
  • 655

3.4.3、在不同系统上配置运行Docker

在不同系统上配置运行Docker 成功安装Docker之后,docker 后台将会以默认的配置运行。 在一个生产环境里,系统管理员通常会根据公司(或组织)的具体要求来配置docker 后台...
  • ljf10010
  • ljf10010
  • 2015年10月10日 21:41
  • 394

3.4.3 循环队列之动态存储空间 (3 )

/* c3-4.h 队列的顺序存储结构(出队元素时不移动元素,只改变队头元素的位置) */  #define QUEUE_INIT_SIZE 10 /* 队列存储空间的初始分配量 */  #def...
  • sjmping
  • sjmping
  • 2012年11月10日 15:01
  • 820

Spring3.0官网文档学习笔记(八)--3.4.3~3.4.6

3.4.3 使用depends-on     使用depends-on可以强制使一个或多个beans先初始化,之后再对这个bean进行初始化。     多个bean之间用“,”、“;”、“ ”隔开。 ...
  • abauch_d
  • abauch_d
  • 2014年06月21日 21:31
  • 838
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:g++ 3.4.3
举报原因:
原因补充:

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