zoukankan      html  css  js  c++  java
  • 解决编译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



  • 相关阅读:
    Ocaml入门(3)
    Delphi数组成员丢失
    Delphi合并2个动态数组
    Delphi用指针读取数组某个元素
    Delphi函数返回数组之TList函数返回
    Delphi函数返回数组之使用TList参数
    Delphi让函数返回数组
    Delphi双向链表
    Delphi指针与string
    Delphi函数指针,用于加载DLL
  • 原文地址:https://www.cnblogs.com/java20130726/p/3218443.html
Copyright © 2011-2022 走看看