c++ linguaggio programma - errore: passare xxx come argomento "this" di xxx elimina i qualificatori





2 Answers

Le funzioni membro che non modificano l'istanza della classe devono essere dichiarate come const :

int getId() const {
    return id;
}
string getName() const {
    return name;
}

Ogni volta che vedi "qualificazioni degli scarti", si tratta di const o volatile .

pdf compilatore download
#include <iostream>
#include <set>

using namespace std;

class StudentT {

public:
    int id;
    string name;
public:
    StudentT(int _id, string _name) : id(_id), name(_name) {
    }
    int getId() {
        return id;
    }
    string getName() {
        return name;
    }
};

inline bool operator< (StudentT s1, StudentT s2) {
    return  s1.getId() < s2.getId();
}

int main() {

    set<StudentT> st;
    StudentT s1(0, "Tom");
    StudentT s2(1, "Tim");
    st.insert(s1);
    st.insert(s2);
    set<StudentT> :: iterator itr;
    for (itr = st.begin(); itr != st.end(); itr++) {
        cout << itr->getId() << " " << itr->getName() << endl;
    }
    return 0;
}

In linea:

cout << itr->getId() << " " << itr->getName() << endl;

Dà un errore che:

../main.cpp:35: errore: passare 'const StudentT' come 'this' argomento di 'StudentT :: getId ()' ignora i qualificatori

../main.cpp:35: errore: passare 'const StudentT' come 'this' argomento di 'std :: string StudentT :: getName ()' elimina i qualificatori

Cosa c'è di sbagliato con questo codice? Grazie!




Facciamo un esempio più dettagliato. Per quanto riguarda la struttura sottostante:

struct Count{
    uint32_t c;

    Count(uint32_t i=0):c(i){}

    uint32_t getCount(){
        return c;
    }

    uint32_t add(const Count& count){
        uint32_t total = c + count.getCount();
        return total;
    }
};

Come si vede sopra, l'IDE (CLion) darà dei suggerimenti Non-const function 'getCount' is called on the const object . Nel metodo add count è dichiarato come const object, ma il metodo getCount non è un metodo const, quindi count.getCount() può cambiare i membri in count .

Compilare l'errore come di seguito (messaggio principale nel mio compilatore):

error: passing 'const xy_stl::Count' as 'this' argument discards qualifiers [-fpermissive]

Per risolvere il problema precedente, puoi:

  1. cambia il metodo uint32_t getCount(){...} in uint32_t getCount() const {...} . Quindi count.getCount() non cambierà i membri nel count .

o

  1. cambia uint32_t add(const Count& count){...} a uint32_t add(Count& count){...} . Quindi count non si preoccupano di cambiare membri in esso.

Per quanto riguarda il tuo problema, gli oggetti di std :: set sono memorizzati come const Student, ma il metodo getId e getId non sono const, quindi dai l'errore sopra riportato.

Puoi anche vedere questa domanda Significato di 'const' ultimo in una dichiarazione di funzione di una classe? per maggiori dettagli.




Related


Tags

c++