Guten Tag! Bitte helfen Sie mir für meinen Code, ich versuche zu constexpr Klasse mit const Zeiger auf nicht-konstant und verändern sich nicht konstante Variable in Zukunft meine compilator sagtC++ konstanter Zeiger in der constexpr Klasse
"error: ‘Actuator{const Pin{1ul, 1ul}, const Pin{1ul, 2ul}, const Pin{1ul, 3ul}, ((velocity_type*)(& velocity))}’ is not a constant expression"
,
Objekt act1 immer das Leben, weil sein Code zu machen für ARM Embedded-Gerät
Code:
#include <cstddef>
typedef std::size_t port_type;
typedef std::size_t pin_type;
typedef std::size_t velocity_type;
class Pin {
private:
port_type const _port;
pin_type const _pin;
public:
constexpr Pin(port_type const port, pin_type const pin) :
_port { port }, _pin { pin } {
}
};
class Actuator {
private:
Pin const _enable_pin;
Pin const _dir_pin;
Pin const _step_pin;
velocity_type* const _velocity; //constant pointer to non-constant variable
public:
constexpr Actuator(Pin const ep, Pin const dp, Pin const sp, const velocity_type velocity) :
_enable_pin { ep }, _dir_pin { dp }, _step_pin { sp }, _velocity(const_cast<velocity_type*>(&velocity)) {
}
void set_velocity(const velocity_type velocity) const {*_velocity = velocity;} //try to change velocity
};
int main() {
constexpr Actuator act1 (Pin { 1, 1 }, Pin { 1, 2 }, Pin { 1, 3 }, 1u);
act1.set_velocity(1u);
}
Selbst wenn Ihr Compiler den Wert der Zeiger zeigt t mehr ändern o würde so tun sowieso _undefined behavior_ (weil es einen baumelnden Zeiger auf den Wert enthält, die nicht mehr existiert). –
meine Vermutung ist, dass die Aussage als Fehler markiert nicht die erforderliche Kompilierung Auswertung nicht erfüllt. Werfen Sie einen Blick auf diese: http: //en.cppreference.com/w/cpp/language/constexpr –