结构的实例
问题描述:
我一直在寻找这个问题2天,但没有运气。结构的实例
,我有以下结构预定义
struct Motor : Port {
Motor(port_t port) : Port(port) {}
void moveAtVelocity(int velocity) { move_at_velocity(m_port, velocity); }
....
};
我再试着拨打结构
Motor M;
的一个实例,我越来越
Error: No matching function for call to Motor::Motor()
Note: Candidates are Motor::Motor(port_t)
怎么办我打电话给一个实例,例如我可以使用以下方法
moveAtVelocity(..);
我知道我搞砸了类和结构和构造函数和析构函数;问题是,我找不到一个适当的教程,如果你可以链接一个给我额外的荣誉。
在此先感谢:-)
答
这是正确的;你应该改为:
Motor M(123);
(其中123是一个端口)。
当您只是说Motor M;
时,编译器会尝试通过调用无参数构造函数来构造此对象。你没有任何定义。但是,您可以只传递上面显示的必需参数。
另一种解决方案是,当然,只需添加一个参数的构造函数,但是这需要你的基类,Port
,有一个过,或者你通过一个固定的值:
Motor() : Port(123) {} // fixed value
Motor() {} // assumes Port has a parameterless constructor
答
Motor
有一个构造函数,它接受一个参数port_t
,因此不会生成默认构造函数(一个没有参数)。尝试:
Motor M(14); // where 14 is a guess by me at what a `port_t` is.
如果没有为port_t
合理的默认值,你可以有一个默认的构造函数添加到Motor
:
struct Motor : Port {
Motor() : Port(14) {}
Motor(port_t port) : Port(port) {}
void moveAtVelocity(int velocity) { move_at_velocity(m_port, velocity); }
....
};
或在当前的构造函数指定参数的默认值:
struct Motor : Port {
Motor(port_t port = 14) : Port(port) {}
void moveAtVelocity(int velocity) { move_at_velocity(m_port, velocity); }
....
};
答
我很惊讶,可能有一个教程没有提到这一点。 C++中没有任何结构。关键字struct
定义了 类的类型,与关键字class
完全相同。唯一的区别是 1)当您使用关键字struct
时,您从public
开始;当你使用关键字时,你从private
开始;和2) 的继承默认为public
,其中struct
和private
和class
。所以:
struct Motor : Port
{
Motor(port_t port) : Port(port) {}
// ...
};
是完全一样的:
class Motor : public Port
{
public:
Motor(port_t port) : Port(port) {}
// ...
};
而且,由于您提供一个构造函数,编译器不产生 默认构造函数。