c语言编译时出现initialized,解决编译warning:warning: ‘MeteringUnit::voltage_gain_’ will be initialized after [-W...

问题:

环境: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. ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值