问题:
环境: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
解决警告“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” 具体类似下图: 很奇怪,为什 ...
linux0.12 解决编译问题常用命令
解决编译问题时,经常需要修改所有的Makefile,特别定义了下面几条命令方便修改. function msed() { find -name "Makefile" -exec s ...
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 ...
随机推荐
The certificate used to sign ";XXX"; has either expired or has been revoked
在Xcode真机调试开发过程中,无论是使用个人证书或者是企业证书,经常会遇到这样的问题:The certificate used to sign "XXX" has either ...
FLUSH TABLES WITH READ LOCK
最近在mysql主从复制中用到锁,翻了资料回忆一下.一下内容参考于:http://blog.csdn.net/arkblue/article/details/27376991 1.FLUSH TABL ...
QThread 与 QObject的关系
Threads and QObjects QThread 继承 QObject..它可以发送started和finished信号,也提供了一些slot函数. QObject.可以用于多线程,可以发送信 ...
我用Cocos2d-x模拟《Love Live!学院偶像祭》的Live场景(一)
同样从CSDN搬过来 博客开这么久了,就发过一篇很水的文章,一直想写点正式的东西.这次准备开工一个仿其他游戏的简单小游戏,于是开博客把开发过程记录下来.这一系列文章主要讲,我是如何从零开始使用Coco ...
利用webpack构建vue项目
快速搭建vue项目 一,确认自己有无搭建好node以及npm环境,这些是前提,具体安装方法可参考https://nodejs.org/en/. 二,开始构建项目. 第1步:新建一个文件夹,随意命名. ...
hdoj4859海岸线
1.地图周围再加一圈海 2.周长最多为sum=n*(m+1)+m*(n+1).如果有邻接相同,要减1.最小割使相同最少.结果为sum-最小割 3.但是有E海滩,两边都能选.让E到S,T都连一个很大的数 ...
文件上传失败 -nginx报错 client intended to send too large body: 1331696 bytes
location / { root /data/fastdfs/data; include gzip.conf; ngx_fastdfs_module; client_max_body_size 10 ...
自动化运维工具Ansible的部署步骤详解
本文来源于http://sofar.blog.51cto.com/353572/1579894,主要是看到这样一篇好文章,想留下来供各位同僚一起分享. 一.基础介绍 ================= ...
WebDriver获得表格里所有单元格的文本
方法为: 1. 得到表格中所有的tr,存到list到中 2.对tr进行循环,根据当前的tr,得到当前所有td的集合存到list当中 3.循环中所有td里的文本 package com.example. ...