Проблема объявления методов и параметров в классе с заголовком - PullRequest
0 голосов
/ 12 марта 2020

Привет всем,

У меня большие проблемы с объявлением некоторых параметров в классе, который я определил в заголовочном файле

Я использую Raspberry Pi с C ++ и пытаюсь реализовать некоторые объекты через класс.

Поэтому у меня есть:

  • мой основной cpp файл, где я вызываю объект (он работает, я уверен, об этом вы увидите)

  • файл класса cpp с именем "Motorcontrol01. cpp"

  • файл заголовка с именем "Motorcontrol01.h"

Мой код более сложен, чем то, что я здесь показываю, но я упростил его для целей тестирования и он все равно не работает -_:

"Motorcontrol01. cpp":

//###################################################################################
// Class for creating the different shift register entry data
//###################################################################################

#include <iostream> //for Cout to display stuff
#include <chrono>   //library for counting time
#include <thread>   //for multithreading
#include <vector>
#include <wiringPi.h>   //Raspberry pi GPIO Library
#include "MotorControl01.h" //looking in current dirrectory

MotorControl::MotorControl(){   //constructeur
    std::vector<std::vector<bool>> DataArr(16, std::vector<bool>(8, 0));    //the vector of vectors with boolean values in it for transmitting the motors control data
    //###################################################################################
    //  GPIO Pins definition
    //###################################################################################
    int SPser = 13, SPclk = 19, SPrclk = 26; //Define the output pins used for the main shift registers
    int PWMSPclk = 17, PWMSPrclk = 18;  // define the output pins to control the PWM shift registers
}

void MotorControl::SendDataPWM(std::vector<std::vector<bool>> DataArr){

    // Initialize wiringPi and allow the use of BCM pin numbering
    wiringPiSetupGpio();

    //initialize the pins
    pinMode(SPser, OUTPUT);
    pinMode(SPclk, OUTPUT);
    pinMode(SPrclk, OUTPUT);
    pinMode(PWMSPclk, OUTPUT);
    pinMode(PWMSPrclk, OUTPUT);

while (1) {
    digitalWrite(PWMSPclk, HIGH);       //sets the pin to a HIGH value
    digitalWrite(PWMSPclk, LOW);
    std::cout << "PWM SP CLK"<<  PWMSPclk <<'\n';
    digitalWrite(PWMSPrclk, HIGH);      /
    digitalWrite(PWMSPrclk, LOW);
    std::cout << "PWM SP R CLK"<< PWMSPrclk <<'\n';
    digitalWrite(SPclk, HIGH);      
    digitalWrite(SPclk, LOW);
    std::cout << "SP CLK"<< SPclk<<'\n';
    digitalWrite(SPrclk, HIGH);     
    digitalWrite(SPrclk, LOW);
    std::cout << "SP R CLK"<< SPrclk<<'\n';
}

}

"Motorcontrol01.h":

#ifndef DEF_MotorControl
#define DEF_MotorControl
#include <vector>
class MotorControl{
    public:
        MotorControl();     //Constructeur
        void SendDataPWM(std::vector<std::vector<bool>> DataArr);

    private:
        std::vector<std::vector<bool>> DataArr;
        int mFrequency;
        int mGPIOOutputNb;
        int SPser, SPclk, SPrclk; //Define the output pins used for the main shift registers
        int PWMSPclk, PWMSPrclk;
};

При компиляции я получил несколько предупреждений о том, что переменные "SPser, SPclk, SPrclk, PWMSPclk PWMSPrclk "определены, но не используются ...

, и когда я запускаю программу, она отображает это:

enter image description here

I Должно быть, где-то сделал ошибку, но я действительно понятия не имею, где ...

Или есть кое-что, что я неправильно понял в уроках. Я читал о предмете классов и объектов ...

Может ли кто-нибудь выделить очевидные вещи, которые я не понял? :)

Заранее благодарим за помощь!

1 Ответ

1 голос
/ 13 марта 2020

Вы объявляете локальные переменные в конструкторе и присваиваете им значения. Эти переменные имеют недолгий срок действия, и их значения видны только в конструкторе (и не связаны с переменными-членами с одинаковыми именами). Ваш конструктор должен выглядеть так, чтобы назначать значения членам, которые используются в других функциях, которые используют закрытые переменные класса (members).

MotorControl::MotorControl(){   //constructeur
    //  GPIO Pins definition
    SPser = 13;
    SPclk = 19;
    SPrclk = 26; //Define the output pins used for the main shift registers
    PWMSPclk = 17;
    PWMSPrclk = 18;  // define the output pins to control the PWM shift registers
}

Также не имеет смысла объявлять массив в конструкторе, потому что вы не используйте его там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...