Errore compilazione

di il
11 risposte

Errore compilazione

Ciao a tutti.
In fase di compilazione di questo programma:

/String for getting the output from arduino
 char output[MAX_DATA_LENGTH];

/*Portname must contain these backslashes, and remember to
replace the following com port*/
const char *port_name = "\\\\.\\COM11";

//String for incoming data
 char incomingData[MAX_DATA_LENGTH];
int main()
{
  SerialPort arduino(port_name);
  if (arduino.isConnected()) cout << "Connection Established" << endl;
  else cout << "ERROR, check port name";

  while (arduino.isConnected()){
    cout << "Write something: \n";
    std::string input_string;
    //Getting input
    getline(cin, input_string);
    //Creating a c string
    char *c_string = new char[input_string.size() + 1];
    //copying the std::string to c string
    std::copy(input_string.begin(), input_string.end(), c_string);
    //Adding the delimiter
    c_string[input_string.size()] = '\n';
    //Writing string to arduino
    arduino.writeSerialPort(c_string, MAX_DATA_LENGTH);
    //Getting reply from arduino
    arduino.readSerialPort(output, MAX_DATA_LENGTH);
    //printing the output
    puts(output);
    //freeing c_string memory
    delete[] c_string;
  }
}
il compilatore mi scrive :

error: invalid conversion from 'const char*' to 'char*' [-fpermissive]
SerialPort arduino(port_name);

Qualcuno potrebbe aiutarmi?
Grazie
Fabrizio

11 Risposte

  • Re: Errore compilazione

    Dichiara
    
    char *port_name = "\\\\.\\COM11";
  • Re: Errore compilazione

    Adesso l'errore è [code ]error: ISO C++ forbids converting a string constant to 'char*' [-Werror=write-strings] char *port_name = "\\\\.\\COM11";
  • Re: Errore compilazione

    Scrivi

    char port_name[ ] = "\\\\.\\COM11";
  • Re: Errore compilazione

    Sì prova con la soluzione di oregon, altrimenti cambia le impostazioni del linguaggio. Mamma mia Arduino...
  • Re: Errore compilazione

    Adesso mi scrive:
    
    undefined reference to `SerialPort::~SerialPort()'
    
    cosa potrebbe essere?
    Grazie
  • Re: Errore compilazione

    Non trova il distruttore di SerialPort

    Hai aggiunto sia SerialPort.h che SerialPort.cpp al progetto?
  • Re: Errore compilazione

    L'ho inserito ed ora l'errore è il seguente:
    
    SerialPort.cpp: In member function 'int SerialPort::readSerialPort(char*, unsigned int)':
    /SerialPort.cpp:71:17: error: 'toRead' may be used uninitialized in this function [-Werror=maybe-uninitialized]
         if (ReadFile(this->handler, buffer, toRead, &bytesRead, NULL)) return bytesRead;
    
    ancora qualche problema...Uff...
    Sapreste aiutarmi?
    Grazie
  • Re: Errore compilazione

    Non ti si può aiutare se non posti il codice. Poi dovresti anche specificare con cosa stai compilando: come mai hai attivato tutti questi controlli stretti?

    Comunque fai prima a usare la libreria ufficiale di Arduino, devi solo cambiare il numero della porta
    https://playground.arduino.cc/Interfacing/CPPWindows
  • Re: Errore compilazione

    Cosa c'è in SerialPort.cpp?
  • Re: Errore compilazione

    Ok proverò grazie.
    E' che il codice è troppo lungo e sto cercando di implementare una funzione in un programma .
    Anzi se qualcuno volesse partecipare alla realizzazione del mio progetto sarei disposto a pagare il disturbo...
    Grazie per ora
    Fabrizio
  • Re: Errore compilazione

    Ma non devi postare tutto, solo la funzione analoga a questa
    
    int Serial::ReadData(char *buffer, unsigned int nbChar)
    {
        //Number of bytes we'll have read
        DWORD bytesRead;
        //Number of bytes we'll really ask to read
        unsigned int toRead;
    
        //Use the ClearCommError function to get status info on the Serial port
        ClearCommError(this->hSerial, &this->errors, &this->status);
    
        //Check if there is something to read
        if(this->status.cbInQue>0)
        {
            //If there is we check if there is enough data to read the required number
            //of characters, if not we'll read only the available characters to prevent
            //locking of the application.
            if(this->status.cbInQue>nbChar)
            {
                toRead = nbChar;
            }
            else
            {
                toRead = this->status.cbInQue;
            }
    
            //Try to read the require number of chars, and return the number of read bytes on success
            if(ReadFile(this->hSerial, buffer, toRead, &bytesRead, NULL) )
            {
                return bytesRead;
            }
    
        }
    
        //If nothing has been read, or that an error was detected return 0
        return 0;
    
    }
    
    
Devi accedere o registrarti per scrivere nel forum
11 risposte