解决编译warning:warning: ‘MeteringUnit::voltage_gain_’ will be initialized after [-Wreorder]
问题:
环境: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]的更多相关文章
- 解决警告“ld: warning: directory not found for option
因为已经把文件编译到项目中,删除的话会出现找不到文件或文件夹的警告. 1选择工程, 编译的 (targets) 2选择 Build Settings 菜单 3查找 Library Search Pat ...
- iOS - 解决警告“ld: Warning: Directory Not Found for Option”
有时候我们可能从项目中删除了某个目录.文件以后,编译出现警告信息: ld: warning: directory not found for option“XXXXXX” 具体类似下图: 很奇怪,为什 ...
- [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 ...
- linux0.12 解决编译问题常用命令
解决编译问题时,经常需要修改所有的Makefile,特别定义了下面几条命令方便修改. function msed() { find -name "Makefile" -exec s ...
- 解决编译apache出现的问题:configure: error: APR not found . Please read the documentation - ____哊.時^随记 - 51CTO技术博客
解决编译apache出现的问题:configure: error: APR not found . Please read the documentation - ____哊.時^随记 - 51CTO ...
- 16种C语言编译警告(Warning)类型的解决方法
当编译程序发现程序中某个地方有疑问,可能有问题时就会给出一个警告信息.警告信息可能意味着程序中隐含的大错误,也可能确实没有问题.对于警告的正确处理方式应该是:尽可能地消除之.对于编译程序给出的每个警告 ...
- 在VS中使用Boost库出现Macro redefinition错误的解决方法(warning C4005)
最近使用Boost库做多线程开发,可视在vs中编译工程师总是遇到Macro redefinition错误,类似下面的错误描述 1>c:\program files (x86)\microsoft ...
- C语言 消灭编译警告(Warning)
如何看待编译警告 当编译程序发现程序中某个地方有疑问,可能有问题时就会给出一个警告信息.警告信息可能意味着程序中隐含的大错误,也可能确实没有问题.对于警告的正确处理方式应该是:尽可能地消除之.对于编译 ...
- App开发流程之使用分类(Category)和忽略编译警告(Warning)
Category使得开发过程中,减少了继承的使用,避免子类层级的膨胀.合理使用,可以在不侵入原类代码的基础上,写出漂亮的扩展内容.我更习惯称之为"分类". Category和Ext ...
随机推荐
- 仿百度壁纸client(五)——实现搜索动画GestureDetector手势识别,动态更新搜索keyword
仿百度壁纸client(五)--实现搜索动画GestureDetector手势识别,动态更新搜索关键字 百度壁纸系列 仿百度壁纸client(一)--主框架搭建,自己定义Tab + ViewPager ...
- iOS ARC也会有内存泄露
本文转载至 http://blog.csdn.net/allison162004/article/details/38753219 iOS提供了ARC功能,很大程度上简化了内存管理的代码. 但使用A ...
- Card Collector
In your childhood, do you crazy for collecting the beautiful cards in the snacks? They said that, fo ...
- Collective Mindsets (medium) (逻辑题)
B - Collective Mindsets (medium) Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I6 ...
- UITableView 右侧索引
1.设置右侧索引字体颜色 self.tabView.sectionIndexColor = [UIColor blackColor]; 2.设置右侧索引背景色 self.cityTabView.sec ...
- cookie的坑
HTTP Cookie 设置了secure , 该cookie只能在HTTPS通道下被写入浏览器. HTTPS Cookie 设置了secure , 该cookie只能 ...
- Android系统字体规范
我们在做Android移动APP设计的时候,字号的选择也是很让人头疼,转载一份有关Android系统字体规范,如果在做Android项目的用户应该看看,如果有任何建议欢迎在留言处与我们交流探讨. 主要 ...
- $.ajax()方法详解(转)
转: http://www.cnblogs.com/tylerdonet/p/3520862.html 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: ...
- 使用阿里云的PyPI源
方法1:(1)创建pip.conf文件 (2).编辑如下内容 [global] index-url = http://mirrors.aliyun.com/pypi/simple/ [install] ...
- rails数据验证
@user1 = :name => "zhou" 与 @user2 = :name=> "ZHOU" 在为保存之前都有可能通过第一关validate ...