结构的实例

时间:2012-03-23 10:16:15

标签: c++ data-structures constructor instance

我已经调查了这个问题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(..);

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

提前致谢: - )

3 个答案:

答案 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 structprivateclass。所以:

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

与:

完全相同
class Motor : public Port
{
public:
    Motor( port_t port ) : Port( port ) {}
    //  ...
};

由于您提供了构造函数,因此编译器不会生成 默认构造函数。