【发布时间】:2014-09-02 19:14:00
【问题描述】:
我的代码中有以下声明:
h 文件:
typedef struct {
bool qualified : 1;
bool running : 1;
} calibration_state_t;
calibration_state_t get_calibration_state();
cpp 文件:
volatile calibration_state_t calibration_state = {false ,false};
功能
calibration_state_t get_calibration_state() {
return *(calibration_state_t *)&calibration_state;
}
编译。但是,如果我将 return 语句替换为
return (calibration_state_t)calibration_state;
失败了
dcf77.cpp: In function ‘DCF77_Frequency_Control::calibration_state_t DCF77_Frequency_Control::get_calibration_state()’:
dcf77.cpp:2923:37: error: no matching function for call to ‘DCF77_Frequency_Control::calibration_state_t::calibration_state_t(volatile DCF77_Frequency_Control::calibration_state_t&)’
dcf77.h:204:7: note: candidates are: DCF77_Frequency_Control::calibration_state_t::calibration_state_t()
dcf77.h:204:7: note: DCF77_Frequency_Control::calibration_state_t::calibration_state_t(const DCF77_Frequency_Control::calibration_state_t&)
编译器是 avr-gcc 但我怀疑这无关紧要。为什么编译器无法编译类型转换?如何以干净的方式获得所需的返回值?
【问题讨论】:
-
您正在强制消除波动性。不要那样做。避免 c 风格的演员表,这隐藏了这个错误。在后一种情况下,C++ 正确地完成了它的工作。