【问题标题】:Including a class object inside another class c++在另一个类 C++ 中包含一个类对象
【发布时间】:2021-08-18 13:28:49
【问题描述】:

我在调用另一个类私有范围内创建的对象上的方法时遇到问题。 错误也在底部。它似乎无法识别我的汽车类中的 Motor 变量。

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

这是在 Arduino 项目中使用的。

电机.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

汽车.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();
};

汽车.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:\4. Study\Deakin\2nd Year\Trimester 2\SIT217 - Engineering 1 Robotics Project\2. 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'

【问题讨论】:

  • 调用函数时不包含类型。 rMotor.init(int forR, int revR); 应该是 rMotor.init(forR, revR);
  • 成员函数就像其他函数一样,您可以像传递任何其他函数一样传递参数(考虑到您正确调用例如absdelay,您似乎知道该怎么做) .

标签: c++ class compiler-errors populate


【解决方案1】:

在方法定义中,如

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

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

就是这样调用方法,只是把来自Cars构造函数的变量传递给motor::init

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

【讨论】:

  • 谢谢。强类型语言遇到的新手错误
【解决方案2】:

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

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

【讨论】:

  • 非常感谢。不敢相信我做到了。我习惯于没有声明任何内容的javascript。
猜你喜欢
  • 2020-12-03
  • 2014-01-26
  • 2013-06-05
  • 2017-01-25
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
相关资源
最近更新 更多