【问题标题】:Pointers not working returning address not value指针不起作用返回地址不是值
【发布时间】:2017-04-13 15:55:56
【问题描述】:

把我逼疯了。我看不出以下不起作用的原因。它总是返回值的地址,而不是值本身。

我尝试了十几种不同的方法来初始化指针和引用指针都无济于事。

初始化和循环

  //INIT the Motors 
  //Motor MOTORNAME(PWM_SHIELD_POSITION, POINTER TO PWM SHIELD)
    Motor LFUpper;
    Motor* ptr1 = &LFUpper;
    Motor LFLower;
    Motor* ptr2 = &LFUpper;
    Motor RFUpper;
    Motor* ptr3 = &LFUpper;
    Motor RFLower;
    Motor* ptr4 = &RFLower;
    Motor BRUpper;
    Motor* ptr5 = &BRUpper
    Motor BRLower;
    Motor* ptr6 = &BRLower
    Motor BLUpper;
    Motor* ptr7 = &BLUpper
    Motor BLLower;
    Motor* ptr8 = &BLLower


    //Init The Menu System
    Menu MenuSys( ptr1, ptr2, ptr3, ptr4, ptr5, ptr6, ptr7, ptr8);


void setup() {
  // put your setup code here, to run once:
    Serial.begin(9600);
    Serial2.begin(9600);
    Serial.print("HELLO");
    ptr1->INIT(FRONT_UPPER_LEFT_MOTOR);
    ptr1->INIT(FRONT_LOWER_LEFT_MOTOR);
    ptr1->INIT(FRONT_UPPER_RIGHT_MOTOR);
    ptr1->INIT(FRONT_LOWER_RIGHT_MOTOR);
    ptr1->INIT(BACK_UPPER_RIGHT_MOTOR);
    ptr1->INIT(BACK_LOWER_RIGHT_MOTOR);
    ptr1->INIT(BACK_UPPER_LEFT_MOTOR);
    ptr1->INIT(BACK_LOWER_LEFT_MOTOR);
}

void loop() {
  // put your main code here, to run repeatedly:
  // Poll The Menu For Changes

  MenuSys.MenuPoll();
}

菜单处理程序

Menu::Menu(Motor *LFUpper1, Motor *LFLower1, Motor *RFUpper1, Motor *RFLower1, Motor *RBUpper1, Motor *RBLower1, Motor *LBUpper1, Motor *LBLower1)
{
  LFUpper = LFUpper1;
  LFLower = LFLower1;
  RFUpper = RFUpper1;
  RFLower = RFLower1;
  LBUpper = LBUpper1;
  LBLower = LBLower1;
  RBUpper = RBUpper1;
  RBLower = RBLower1;
}

void Menu::MenuPoll()
{
  if (Serial2.available())
  {
    String readVal;
    int rw = 0;
    readVal = Serial2.readString();
    Serial.println(readVal);
    if (readVal.startsWith("W"))
    {
      rw = 1;
    }
    else
    {
      rw = 0;
    }
    int MenuCommand = readVal.substring(1, 4).toInt();
    int Value =  readVal.substring(4, readVal.length()).toInt();

    MenuHandler(rw, MenuCommand, Value);
  }
}

void Menu::MenuHandler(int rw, int MenuCommand, int Value)
{
  Serial.println(rw);
  Serial.println(MenuCommand);
  Serial.println(Value);
  switch (MenuCommand) {
      case 111:
      if (rw == 1)
       {
        Serial.print(LFUpper->pwmMIN);
        LFUpper->pwmMIN = Value;
       }

Serial.print(LFUpper->pwmMIN); 行没有打印正确的值

【问题讨论】:

  • 它打印什么价值,你期望什么价值

标签: c++ class pointers


【解决方案1】:

您似乎获取了错误对象的地址。

Motor LFUpper;
Motor* ptr1 = &LFUpper;
Motor LFLower;
Motor* ptr2 = &LFUpper;
Motor RFUpper;
Motor* ptr3 = &LFUpper;

应该是

Motor LFUpper;
Motor* ptr1 = &LFUpper;
Motor LFLower;
Motor* ptr2 = &LFLower;
Motor RFUpper;
Motor* ptr3 = &RFUpper;

还有你的ptr1->INIT() 阻止所有在ptr1 上调用INIT。

【讨论】:

  • 关于我从我的临时窗口复制和粘贴的应用程序我已经修复了这些问题在我修复它仍然无法正常工作之后我发现了一些我认为可以修复它并实际制作的其他问题所以它第一次通过循环工作,但后来它中断了..例如,如果它第一次看到的值是 123,我会得到 123,下一次我得到 529000,我没有做任何在周期之间对数据进行操作。所以我回到方块 1 并消除了所有作为函数参数传递的嵌套指针,现在它可以工作了。
【解决方案2】:

我发现了一些其他的问题,我认为可以解决它并实际解决了它,所以它第一次通过循环就可以工作,但后来它中断了..例如,如果它第一次看到的值是 123会得到 123,接下来我会得到 529000,我没有对周期之间的数据进行任何操作。所以我回到方块 1 并消除了所有作为函数参数传递的嵌套指针,现在它可以工作了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    相关资源
    最近更新 更多