我已经调查了这个问题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(..);
我知道我在类和结构,构造函数和析构函数之间搞砸了;问题是我找不到合适的教程,如果你可以为我链接一个额外的荣誉。
提前致谢: - )
答案 0 :(得分:2)
这是对的;你应该拥有的是:
Motor M(123);
(其中123是一个端口)。
当您只说Motor M;
时,编译器会尝试通过调用无参数构造函数来构造此对象。你没有任何定义。但是,您可以像上面显示的那样传递必需的参数。
另一种解决方案当然是只添加一个无参数构造函数,但这需要您的基类Port
也有一个,或者您要传递一个固定值:
Motor() : Port(123) {} // fixed value
Motor() {} // assumes Port has a parameterless constructor
答案 1 :(得分:2)
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); }
....
};
答案 2 :(得分:0)
我很惊讶可能有一个没有提到这个的教程。
在C ++中实际上没有任何结构。关键字struct
定义了一个
类类型,与关键字class
完全相同。唯一的区别是
1)当您使用关键字struct
时,您将开始public
;什么时候
您使用关键字class
,就会开始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 ) {}
// ...
};
由于您提供了构造函数,因此编译器不会生成 默认构造函数。