2012-03-23 81 views
0

我一直在寻找这个问题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(..); 

我知道我搞砸了类和结构和构造函数和析构函数;问题是,我找不到一个适当的教程,如果你可以链接一个给我额外的荣誉。

在此先感谢:-)

回答

2

这是正确的;你应该改为:

Motor M(123); 

(其中123是一个端口)。

当您只是说Motor M;时,编译器会尝试通过调用无参数构造函数来构造此对象。你没有任何定义。但是,您可以只传递上面显示的必需参数。

另一种解决方案是,当然,只需添加一个参数的构造函数,但是这需要你的基类,Port,有一个过,或者你通过一个固定的值:

Motor() : Port(123) {} // fixed value 
Motor() {} // assumes Port has a parameterless constructor 
1

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); } 
    .... 
}; 
0

我很惊讶,可能有一个教程没有提到这一点。 C++中没有任何结构。关键字struct定义了 类的类型,与关键字class完全相同。唯一的区别是 1)当您使用关键字struct时,您从public开始;当你使用关键字时,你从private开始;和2) 的继承默认为public,其中structprivateclass。所以:

struct Motor : Port 
{ 
    Motor(port_t port) : Port(port) {} 
    // ... 
}; 

是完全一样的:

class Motor : public Port 
{ 
public: 
    Motor(port_t port) : Port(port) {} 
    // ... 
}; 

而且,由于您提供一个构造函数,编译器不产生 默认构造函数。