g++ 3.4.3
来源:互联网 发布:淘宝上破解软件 靠谱吗 编辑:程序博客网 时间:2024/05/01 11:15
近来公司的事情比较多,都没有时间来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()。
- g++ 3.4.3
- 3G?4G?
- 什么是2G、3G、4G
- 1G、2G、3G、4G是什么
- 2G、 3G、 4G、5G的区别
- 什么是3G?2.5G
- 2G,3G,4G,CDMA,GSM,GPRS
- Android 程序 2G/3G/4G 流量统计
- 2G-3G-4G网络结构演进过程
- GPRS 区分2g/3g/4g网络
- ios 实时检测2G、3G、4G
- 2G、3G、4G速度对比
- 移动通信频段(2G、3G、4G)
- 网络测试-2G、3G、4G网速参考
- 2G-3G-4G网络结构演进过程
- 2G与3G(转载)
- 状态栏3G-4G信号
- 尤肖虎,中国3G、4G掌门人
- 第一次亲密接触
- 怎么办呢?
- 转贴好词一首
- MTL 向量欧基里德范数 示例
- FIT FOR DOT NET (6)----RowFixture
- g++ 3.4.3
- 使用 OSGi 作为软件产品框架
- 想通过vbscript将所有电脑的tcp/ip设定导入文件进行检视,怎么做到?
- 关于java异常处理机制的深入理解
- 修炼一名程序员的职业水准(林庆忠__署名原创)
- 漫谈软件性能测试技术
- 面试技巧:16个经典面试问题回答思路
- OC 3 12 48
- [转帖]如果在某一天,你再也见不到我