问题:

环境:ubuntu 12.04,g++版本4.6.3,编译目标文件时出现warnings:

u1204@u1204-zhw:~/hwsvn/2sw/4prj_mips/UCP_rt5350/src/trunk$ make clean;make
rm -f *.o local_ctrl
g++ -g3 -Wall -o0 -c msgrcv_cmd.cpp -o msgrcv_cmd.o
In file included from msgrcv_cmd.h:24:0,
from msgrcv_cmd.cpp:30:
controller.h: In constructor ‘MeteringUnit::MeteringUnit(size_t, double, double, double)’:
controller.h:92:12: warning: ‘MeteringUnit::voltage_gain_’ will be initialized after [-Wreorder]
controller.h:91:12: warning: ‘double MeteringUnit::current_gain_’ [-Wreorder]
controller.h:77:5: warning: when initialized here [-Wreorder]
g++ -g3 -Wall -o0 -c controller.cpp -o controller.o
In file included from controller.cpp:21:0:
controller.h: In constructor ‘MeteringUnit::MeteringUnit(size_t, double, double, double)’:
controller.h:92:12: warning: ‘MeteringUnit::voltage_gain_’ will be initialized after [-Wreorder]
controller.h:91:12: warning: ‘double MeteringUnit::current_gain_’ [-Wreorder]
controller.h:77:5: warning: when initialized here [-Wreorder]
g++ -g3 -Wall -o0 -c thread.cpp -o thread.o
g++ -g3 -Wall -o0 -c ini_file.cpp -o ini_file.o
g++ -g3 -Wall -o0 -c main_ctrl.cpp -o main_ctrl.o
In file included from main_ctrl.cpp:25:0:
controller.h: In constructor ‘MeteringUnit::MeteringUnit(size_t, double, double, double)’:
controller.h:92:12: warning: ‘MeteringUnit::voltage_gain_’ will be initialized after [-Wreorder]
controller.h:91:12: warning: ‘double MeteringUnit::current_gain_’ [-Wreorder]
controller.h:77:5: warning: when initialized here [-Wreorder]

解决办法:

1. 出问题的地方在头文件controller.h中,

class MeteringUnit {
public:
MeteringUnit(size_t port_num = 1, double pgain = 1.0, double cgain = 1.0, double vgain = 1.0)
: port_(port_num), power_gain_(pgain), voltage_gain_(vgain), current_gain_(cgain) { }
~MeteringUnit();
void Refresh();
double Power() const;
double Current() const;
double Voltage() const;
private:
size_t port_;
operation* mu_op_;
static const SensorType sensor_typ_ = EMETER;
private:
static const int emeter_pulse_const_ = 3200;
double power_gain_;
double current_gain_;
double voltage_gain_;
double power_;
double current_;
double voltage_;
int gpqs1_; // GP1/GQ1/GS1(0x50/0x51/0x52)
int gphs1_; // Gphs1(0x6d)
int p1offset_; // P1offset(0x65)
};

从编译后的提示,已经可以很明白地看出错在什么地方了,

MeteringUnit::voltage_gain_应该在double MeteringUnit::current_gain_之后初始化。

也就是说,构造函数中变量初始化的顺序与该成员变量在类MeteringUnit中定义的顺序不一致。

将其中的两行

    MeteringUnit(size_t port_num = 1, double pgain = 1.0, double cgain = 1.0, double vgain = 1.0)
: port_(port_num), power_gain_(pgain), voltage_gain_(vgain), current_gain_(cgain) { }

改为

    MeteringUnit(size_t port_num = 1, double pgain = 1.0, double cgain = 1.0, double vgain = 1.0)
: port_(port_num), power_gain_(pgain), current_gain_(cgain), voltage_gain_(vgain) { }

重新编译,问题解决。

u1204@u1204-zhw:~/hwsvn/2sw/4prj_mips/UCP_rt5350/src/trunk$ make clean;make
rm -f *.o local_ctrl
g++ -g3 -Wall -o0 -c msgrcv_cmd.cpp -o msgrcv_cmd.o
g++ -g3 -Wall -o0 -c controller.cpp -o controller.o
g++ -g3 -Wall -o0 -c thread.cpp -o thread.o
g++ -g3 -Wall -o0 -c ini_file.cpp -o ini_file.o
g++ -g3 -Wall -o0 -c main_ctrl.cpp -o main_ctrl.o
g++ -o local_ctrl msgrcv_cmd.o controller.o thread.o ini_file.o main_ctrl.o -L../../drivers -lphysicalop -lpthread

解决编译warning:warning: ‘MeteringUnit::voltage_gain_’ will be initialized after [-Wreorder]的更多相关文章

  1. 解决警告“ld: warning: directory not found for option

    因为已经把文件编译到项目中,删除的话会出现找不到文件或文件夹的警告. 1选择工程, 编译的 (targets) 2选择 Build Settings 菜单 3查找 Library Search Pat ...

  2. iOS - 解决警告“ld: Warning: Directory Not Found for Option”

    有时候我们可能从项目中删除了某个目录.文件以后,编译出现警告信息: ld: warning: directory not found for option“XXXXXX” 具体类似下图: 很奇怪,为什 ...

  3. [WARNING] Warning: selected war files include a WEB-INF/web.xml which will be ignored (webxml attribute is missing from war task, or ignoreWebxml attribute is specified as 'true')

    WARNING] Warning: selected war files include a WEB-INF/web.xml which will be ignored (webxml attribu ...

  4. linux0.12 解决编译问题常用命令

    解决编译问题时,经常需要修改所有的Makefile,特别定义了下面几条命令方便修改. function msed() { find -name "Makefile" -exec s ...

  5. 解决编译apache出现的问题:configure: error: APR not found . Please read the documentation - ____哊.時^随记 - 51CTO技术博客

    解决编译apache出现的问题:configure: error: APR not found . Please read the documentation - ____哊.時^随记 - 51CTO ...

  6. 16种C语言编译警告(Warning)类型的解决方法

    当编译程序发现程序中某个地方有疑问,可能有问题时就会给出一个警告信息.警告信息可能意味着程序中隐含的大错误,也可能确实没有问题.对于警告的正确处理方式应该是:尽可能地消除之.对于编译程序给出的每个警告 ...

  7. 在VS中使用Boost库出现Macro redefinition错误的解决方法(warning C4005)

    最近使用Boost库做多线程开发,可视在vs中编译工程师总是遇到Macro redefinition错误,类似下面的错误描述 1>c:\program files (x86)\microsoft ...

  8. C语言 消灭编译警告(Warning)

    如何看待编译警告 当编译程序发现程序中某个地方有疑问,可能有问题时就会给出一个警告信息.警告信息可能意味着程序中隐含的大错误,也可能确实没有问题.对于警告的正确处理方式应该是:尽可能地消除之.对于编译 ...

  9. App开发流程之使用分类(Category)和忽略编译警告(Warning)

    Category使得开发过程中,减少了继承的使用,避免子类层级的膨胀.合理使用,可以在不侵入原类代码的基础上,写出漂亮的扩展内容.我更习惯称之为"分类". Category和Ext ...

随机推荐

  1. Android异步处理三:Handler+Looper+MessageQueue深入详解

    在<Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面>中,我们讲到使用Thread+Handler的方式来实现界面的更新,其实是在非UI线程发送消息到U ...

  2. Laravel开发:Laravel核心——Ioc服务容器

    服务容器 在说 Ioc 容器之前,我们需要了解什么是 Ioc 容器. Laravel 服务容器是一个用于管理类依赖和执行依赖注入的强大工具. 在理解这句话之前,我们需要先了解一下服务容器的来龙去脉:  ...

  3. mysql数据库的导出与导入

    导出 在dos节目,切换到mysql依照文件夹的bin下.输入下面命令 mysqldump -u root -p nxu_life > nxu_life2.sql 运行完毕后.就能够看到在bin ...

  4. List和Set排序的实现

    List.Set.Map的区别 List和Set继承了Collection接口. List以特定索引来存取元素,可以有重复元素.Set不能存放重复元素(用对象的equals()方法来区分元素是否重复) ...

  5. 如何将gedit变成c++编译器

    本蒟蒻的第一篇文章,分享一下神佬教我的好东西 ——将Ubuntu 16.04上gedit变为编译器! 1° 新建文档.然后点击编辑,打开首选项. 2° 勾选外部工具,然后退出.打开工具,选择Manag ...

  6. linux中添加PHP的mongoDB支持扩展

    最近使用ThinkPHP连接mongoDB数据库进行增删改查,在使用之前,需要PHP本身支持对mongoDB的连接,下面是我安装PHP的mongoDB扩展的方法 wget -c http://pecl ...

  7. Data Structure Array: Move all zeroes to end of array

    http://www.geeksforgeeks.org/move-zeroes-end-array/ #include <iostream> #include <vector> ...

  8. nodejs模块之fs&&stream

    nodejs的文件系统fs模块,可以实现对文件.目录等的操作,stream模块实现对文件数据的断续读写操作 一.文件操作 fs.readFile(file[,options],callback) 异步 ...

  9. P3768 【简单的数学题】

    P3768 [简单的数学题] \(Ans=\sum ^{n}_{i=1}\sum ^{n}_{j=1}ijgcd(i,j)\) \(=\sum ^{n}_{i=1}\sum ^{n}_{j=1}ij\ ...

  10. Linux上网设置

    ifconfig 命令查看网络设置 步骤1.配置/etc/sysconfig/network-scripts/ifcfg-eth0 里的文件.有的是(ifcfg-ens33) 文件 CentOS下的i ...