在另一个 class c++ 中包含一个 class 对象

Including a class object inside another class c++

我无法调用在另一个 classes 私有范围内创建的对象的方法。 错误也在底部。它似乎无法识别我车内的电机变量 class。

我需要将它们创建为指针吗?还是我还缺少其他东西?

这是要在Arduino项目中使用的。

Motor.h:

    /*
 * Library for turning a motor
 * turns forward reverse and stops
 */
#ifndef Motor_h
#define Motor_h

class Motor {
  private:
    int _fPin;
    int _bPin;
  public:
    Motor();
    void init(int fPin, int bPin);

    void forward();

    void back();

    void brake();
};

#endif

Car.h

#include "Motor.h"

class Car
{
  private:
    Motor rMotor;
    Motor lMotor;
    float degPerMs = 4.44;

  public:
  
    Car(int forR, int revR, int forL, int revL);

    void forward();

    void reverse();

    //input from -180 to 180
    void turn(int angle);

    void brake();
};

Car.cpp;

#include "Car.h"
#include "Motor.h"
#include "Arduino.h"

Car::Car(int forR, int revR, int forL, int revL)
{
    rMotor.init(int forR, int revR);
    lMotor.init(int forL, int revL);
};

Car::forward()
{
    rMotor.forward();
    lMotor.forward();
}

Car::reverse()
{
    rMotor.back();
    lMotor.back();
};

Car::turn(int angle)
{

    float onTime = abs(angle) * degPerMs;

    if (angle < 0)
    {
        rMotor.forward();
        lMotor.back();
        delay(onTime);
        rMotor.brake();
        lMotor.brake();
    }
    else
    {
        lMotor.forward();
        rMotor.back();
        delay(onTime);
        rMotor.brake();
        lMotor.brake();
    }
};

Car::brake()
{
    lMotor.brake();
    rMotor.brake();
};

错误

D:. Study\Deakinnd Year\Trimester 2\SIT217 - Engineering 1 Robotics Project. Project\main\Car.cpp: In constructor 'Car::Car(int, int, int, int)':
Car.cpp:7:17: error: expected primary-expression before 'int'
     rMotor.init(int forR, int revR);
                 ^~~
Car.cpp:7:27: error: expected primary-expression before 'int'
     rMotor.init(int forR, int revR);
                           ^~~
Car.cpp:8:17: error: expected primary-expression before 'int'
     lMotor.init(int forL, int revL);
                 ^~~
Car.cpp:8:27: error: expected primary-expression before 'int'
     lMotor.init(int forL, int revL);
                           ^~~
exit status 1
expected primary-expression before 'int'

在方法定义中,如

Car::Car(int forR, int revR, int 
forL, int revL)
{
    rMotor.init(int forR, int revR);
    lMotor.init(int forL, int revL);
};

您是在调用 init,而不是定义它。所以指定参数类型是错误的(int),它会导致一组编译错误。

只需以这种方式调用方法,只需将来自 Car 构造函数的变量传递给 motor::init

Car::Car(int forR, int revR, int 
forL, int revL)
{
    rMotor.init(forR, revR);
    lMotor.init(forL, revL);
};

您必须在参数列表中调用 rMotor.init()lMotor.init() 而不指定类型限定符 int:

Car::Car(int forR, int revR, int forL, int revL)
{
rMotor.init(forR, revR);
lMotor.init(forL, revL);
};