метод указателя на объект недоступен

0

мой класс выглядит так

class A{
private:
    int id;
public:
    A();
    int getId();
}

class B{
private:

public:
  B();
}

Реализация

//constructor
    B::B() : A(){
    }

B расширяет класс A.

Ладно, в моей основной cpp у меня есть такая функция

bool checkID(B *obj){
    if(obj->getId() > 1){ return true; } else { return false; }

}

Тем не менее, obj-> getId(), getId() говорит, что это невозможно.

Почему это?

  • 0
    В дополнение к другим комментариям / ответам ниже, измените return obj->getID() > 1; , Результатом этого выражения уже является логическое значение, нет необходимости проверять, является ли оно истинным, а затем возвращать true или, если false, возвращать false.
  • 0
    Какой компилятор вы использовали. Поскольку этот код не компилируется с g ++, он безошибочно сообщает error: type A is not a direct base of B
Теги:

2 ответа

1
Лучший ответ

По умолчанию C++ использует частное наследование. Используйте B: public A, чтобы публично наследовать от A. Также вам нужно определить наследование в объявлении.

class B : public A {
 public:
  B();
}
  • 0
    Ах я вижу. я думал, что это было публично по умолчанию. Благодарю.
  • 0
    общедоступный, закрытый или защищенный, если вы не укажете, что один класс является производным от другого, компилятор не сделает этого за вас ;-)
Показать ещё 2 комментария
0

B должен быть получен из A, чтобы члены A были доступны из объектов B.

class B : public A { ... };

Ещё вопросы

Сообщество Overcoder
Наверх
Меню