快要下班的时候,开发部的一名小鲜肉找我帮忙解决一个问题:

才哥,我们提供给计费组的库在计费主机上编译报错了,但是提供给其他组用时没有编译报错。计费也不认,说编译器报的是我们代码上的错误,要我解决,帮我看看呢,这是报错信息:

pbobject.h:129: error: reference to 'Message' is ambiguous
message.h:169: error: candidates are: class google::protobuf::Message
Message.h:28: error:                 class Bmco::Message
pbobject.h:129: error: reference to 'Message' is ambiguous
message.h:169: error: candidates are: class google::protobuf::Message
Message.h:28: error:                 class Bmco::Message
pbobject.h:129: error: 'Message' has not been declared 

我一看是模糊定义,是二义性问题,大概有了谱。

最开始的想法是找到编译报错的cpp文件,使用g++ -E选项把编译转换单元展开看看到底是哪里重复定义了。但是由于计费组的make输出太复杂太长,看不出来。于是直接在计费的代码目录下使用find命令全文搜索了“class Message”,发现果真有一个类定义。但是有一个问题是开发部这边使用的protocol buffer下面的Message应该是要用名字空间“google::protobuf”  来限定访问,不应该有这样的问题,于是查看了开发部提供的.h文件 赫然有一个“using namespace google::protobuf”,于是谜底揭开了,还是开发部这边提供的头文件问题,为什么其他组没有遇到问题?那是运气好,别人没有定义全局的Message类。

解决办法就是让开发部的小鲜肉把头文件的using namespace google::protobuf去掉,把所有函数参数,对象,指针定义Message的地方通过显示的名字空间访问。

总的来说还是开发部的代码不规范,既然是要提供库给其他模块,那么首先就应该定义一个属于开发部这边的名字空间,所有要提供出去的名称都在这个名字空间下来声明。  名字空间就是专门来解决这种问题的,这种错误不应该犯。

一次简单的C++编译错误的更多相关文章

  1. oracle简单存储过程以及如何查看编译错误

    oracle简单存储过程以及如何查看编译错误; CREATE OR REPLACE PROCEDURE procedure_test ISval VARCHAR2(200);BEGIN /* val ...

  2. xcode工程编译错误:No architectures to compile for

    问题 开发环境:xcode6,iPhone6模拟器 xcode工程编译错误:No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active ...

  3. 35.Intellij IDEA设置忽略部分类编译错误

    转自:https://www.aliyun.com/jiaocheng/290360.html 有些时候我们的项目中有些错误,但这些错误并不影响项目的整体运行(或许是没有使用到),默认情况下idea是 ...

  4. 利用huson的日志获取编译错误信息的做法

    作者:朱金灿 来源:http://blog.csdn.net/clever101 使用hudson编译一百多个VC工程,输出的日志有6M之大,摆在我面前的一个问题是如何利用这个日志信息来获取编译错误信 ...

  5. C++编译错误 --- 成员函数定义在 .h 文件中出现重定义错误(Error LNK 2005)

    今天写了一个简单的类,定义在 .h 文件中, 类很简单就将其成员函数定义在了一起(class类后面).运行的时候出现了如下图所示的编译错误(error LNK2005) 查资料,大部分都是说需要加上 ...

  6. Intellij IDEA设置忽略部分类编译错误

    有些时候我们的项目中有些错误,但这些错误并不影响项目的整体运行(或许是没有使用到),默认情况下idea是无法通过编译的,因此也就无法部署运行,要达到正确运行项目的目的需要作一些设置才行. 设置Inte ...

  7. openbmc编译错误汇总,持续更新,建议收藏

    本文汇总自己在编译openbmc时遇到的一些问题及解决思路,希望对有兴趣研究openbmc的同学有一些帮助. 项目地址:https://github.com/openbmc/openbmc 编译步骤: ...

  8. xamarin.forms新建项目android编译错误

    vs2015 update3 新建的xamarin.forms项目中的android项目编译错误.提示缺少android_m2repository_r22.zip,96659D653BDE0FAEDB ...

  9. 《转载》使用org.w3c.dom.Element的setTextContent()、getTextContent()方法时出现编译错误

    今天在更新项目后进行编译时,出现如下错误一堆: 编译错误 Google之,在stackoverflow上看到如下的解决方法: I came here with the same problem. Ev ...

随机推荐

  1. BZOJ5301:[CQOI2018]异或序列(莫队)

    Description 已知一个长度为 n 的整数数列 a[1],a[2],…,a[n] ,给定查询参数 l.r ,问在 [l,r] 区间内,有多少连续子 序列满足异或和等于 k . 也就是说,对于所 ...

  2. CentOS 7安装简介及基本操作

    计算机基本概念: 1.计算机硬件组成: 2.计算机系统结构: 3.操作系统的功能:硬件驱动.进程管理.内存管理.网络管理.安全管理.文件管理等. 4.OS通用目的的软件程序:用户<-->应 ...

  3. Server.xml解析

    来源 本文整理自 <Tomcat内核设计剖析>.<Tomcat结构解析> 加上自己的理解.源码来自 Tomcat8.5 版本 <Server port="800 ...

  4. 【SPJ6285 NGM2 - Another Game With Numbers】 题解

    题目链接:https://www.luogu.org/problemnew/show/SP6285 唉好久之前校内模拟赛的题目 嘴上说着明白但是实现起来我的位运算太丑陋了啊! #include < ...

  5. 在WinCE上播放声音、设置透明图片、系统音量 C#

    记录一下用到的C#在WinCE平台上的相关技巧备查 1.C#在WinCE上实现透明图片 1 2 3 4 5 6 7 8 9 using System.Drawing.Imaging;       pu ...

  6. EF Core 2.0中Transaction事务会对DbContext底层创建和关闭数据库连接的行为有所影响

    数据库 我们先在SQL Server数据库中建立一个Book表: CREATE TABLE [dbo].[Book]( ,) NOT NULL, ) NULL, ) NULL, ) NULL, [Cr ...

  7. 再看redux

    redux提供了一个全局的唯一状态树,不代表就不需要组建本身的state. 何时用react组件的state.props?? state只表示一些‘临时的’‘内部的’状态数据.临时的:代表你可以临时改 ...

  8. winform 实现定位

    如何在winform中 导入地图实现定位功能    ? 从网上下个BaiDuMap.htm, 就是个js文件 在form中加入webBrowser控件,然后在窗体的加载事件中写入如下代码 webBro ...

  9. Flask—07-建立自己的博客(01)

    博客项目 一局王者的时间轻松学会用Flask建立一个属于自己的博客. 需求分析 用户注册登录 用户信息管理 博客发表回复 博客列表展示 博客分页展示 博客收藏点赞 搜索.统计.排序.… 目录结构 bl ...

  10. Swift_类和结构体

    Swift_类和结构体 点击查看源码 struct Resolution { var width = 0 var height = 0 } class VideoMode { var resoluti ...