Доступ к встроенной функции через переменную-член const - PullRequest
0 голосов
/ 22 февраля 2019

Я хотел понять, как работает встроенная переменная-член при доступе к ней через переменную-член const.Каждый раз, когда я пытаюсь это сделать, я получаю сообщение об ошибке!

Это то, что я пытаюсь

#include <iostream>
#include <string>
using namespace std;

class A{
    public:
    A()
    {
        _uuid = 0;
    }
    ~A();
    void setUUID(int n) { _uuid = n; }
    inline int getUUID(){  return _uuid;} const
    int getUUID1() const {  return _uuid;} 
    int getUUIDsmart()const 
    { 
        return _uuid; 
    }
    private:
    int _uuid;    
};

class B {
    public:
    B(){}
    ~B();
    void fun1(const A *obj) 
    {
        cout<<obj->getUUIDsmart()<<endl;   //works fine
        cout<<obj->getUUID1()<<endl;       //works fine
        cout<<obj->getUUID()<<endl;        //error

        A *obj1 = const_cast<A *>(obj);
        cout<<obj1->getUUID()<<endl;       //works fine
    }
};

int main()
{
  B *b = new B;
  A *a = new A;
  a->setUUID(12);
  b->fun1(a);
}

Я могу заставить свой код работать через

const_cast

Но мне интересно знать, почему я получаю ошибку во встроенной функции, если я пытаюсь получить к ней доступ через функцию-член const?

Обновление: FIX

Мой плохой.Я испортил расположение const!Благодаря @ bruno

inline int getUUID() const { return _uuid; }
//correct syntax. i placed the const at the end

1 Ответ

0 голосов
/ 22 февраля 2019

[примечание: я использую первую версию вопроса]

вы неправильно указали свою константу:

inline int getUUID(){  return _uuid;} const
int getUUID1(){  return _uuid;} const
int getUUIDsmart()const 

на самом деле

inline int getUUID(){  return _uuid;} 
const int getUUID1(){  return _uuid;} 
const int getUUIDsmart()const 

Я просто* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * '' 101 '*' * '* 101' * * '' '' '' '' '' '' '1010 "*" * 1018 ". равны const , поэтому вы не можете применить их к const instance

Нет никакой связи с тем фактом, что ваши методы встроены или нет.


Примечание:

cout<<obj->getUUID1()<<endl;       //works fine

это не

...