Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626

    [C++/Qt] write/read/close was not declared in this scope

    Ciao a tutti,
    Ho realizzato un applicazione con le qt su linux mint 13 a 64bit...e tutto funziona
    A questo punto volevo creare una versione per i 32bit, quindi ho istallato su virtualbox mint 14 @32bit

    - Installato qt creator
    - Aperto il progetto e compilato

    risultato: mi da questi errori

    'close' was not declared in this scope
    'read' was not declared in this scope
    'write' was not declared in this scope

    Questo il codice incriminato


    codice:
    #ifndef DEVICEMANAGER_H
    #define DEVICEMANAGER_H
    
    #include <QObject>
    #include <QMessageBox>
    #include <QString>
    #include "datamanager.h"
    
    class DeviceManager : public QObject{
        Q_OBJECT
    public:
        explicit DeviceManager(QWidget *parent = 0, DataManager *d = 0){p = parent; d_manager=d;}
        virtual void openPort(const char *port)=0;
        ~DeviceManager(){}
    
    protected:
        DataManager *d_manager;
        QWidget *p;
        int reading_errors;
    public slots:
        virtual void t_readData() = 0;
    
    signals:
        void update();
        void error();
    
    };
    #endif // DEVICEMANAGER_H
    codice:
    #include <stdio.h>
    #include <fcntl.h>
    #include <termios.h>
    #include <errno.h>
    #include <devicemanager.h>
    #include <vector>
    #include <QTime>
    #include "exceptions.h"
    
    class SerialPort : public DeviceManager{
        Q_OBJECT
    public:
        explicit SerialPort(QWidget *parent = 0, DataManager *dm = 0);
        void openPort(const char *port);
        ~SerialPort();
        std::vector<int> values;
    private:
        int fd;
        int nBlocks;
    
    public slots:
        void t_readData();
    
    };
    
    #endif // SERIALPORT_H
    Dentro openPort() e t_readData() utilizzo close(), read(), write, tipo:

    codice:
    SerialPort::~SerialPort(){
        if(this->fd  != -1); close(this->fd);
    }
    
    void SerialPort::t_readData(){
    
        int len = 1;
        uchar byte = 0;
        int count = 0;
        ushort iValue =0;
        uchar *pValue = (uchar*)&iValue;
    
        int pIndex = 0;
        int vIndex = 0;
    
        double values[N_PARAMS+1];
        double max[N_PARAMS+1];
        double min[N_PARAMS+1];
        QTime t;
    
        if(this->fd == -1) return;
        tcflush(this->fd, TCIFLUSH);
    
        len = write(this->fd, "\xAA", sizeof(char));
    
        ....
    
    }
    Qualcuno sa il motivo di questo ?

  2. #2
    read, write e close sono dichiarate in <unistd.h>; includilo nel file in cui le utilizzi.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Grazie!!! ma come mai questa differenza?

    Cmq. adesso non mi vede unlink .... dove lo hanno messo adesso?

  4. #4
    Originariamente inviato da boots
    Grazie!!! ma come mai questa differenza?
    Probabilmente nella versione dei vari header installati sull'altra macchina da qualche parte veniva incluso <unistd.h>, per cui compilava lo stesso anche se non lo avevi incluso esplicitamente.
    Cmq. adesso non mi vede unlink .... dove lo hanno messo adesso?
    È sempre in unistd.h; in ogni caso, trovi queste informazioni nelle man pages (man 2 nomefunzione se è una syscall, man 3 nomefunzione se è una funzione di libreria).
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Perfetto, adesso compila correttamente.

    Grazie di nuovo

  6. #6
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.