在另一个 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);
};
我无法调用在另一个 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);
};