Изменение поля указателя указателя из метода - PullRequest
0 голосов
/ 03 сентября 2018

Я пытаюсь изменить поле bool в методе. Метод принимает указатель-указатель bool, но не может понять, как это сделать правильно.

Это базовый пример того, что я хочу сделать:

class WarningManager {
    bool seenWarningA; 

    void updateWarnings() {
        pushWarning(&seenWarningA)
    }

    void pushWarning(bool ** warning) {
        **warning = true;
    }
} 

В этом примере кода ошибки (отправка bool *, но должна быть bool **), и я попробовал другие способы без удачи. Не могу найти онлайн примеров, но, возможно, я ищу неправильные термины. Как правильно это сделать?

Ответы [ 3 ]

0 голосов
/ 03 сентября 2018

Две ошибки:

Сначала - ваше объявление pushWarning с параметром типа bool**, и вы пытаетесь отправить bool*.

Во-вторых, вы можете просто использовать ссылку:

using namespace std;

class WarningManager {
public:
    bool seenWarningA;

    void updateWarnings() {
        pushWarning(seenWarningA);
    }

    void pushWarning(bool &warning) { // You can simply use refference instead of pointer to pointer, or pointer at all..
        warning = true;
    }
};

int main()
{
    WarningManager w;
    w.seenWarningA = false;
    w.updateWarnings();
    cout << w.seenWarningA; // Prints 1

    return 0;
}
0 голосов
/ 03 сентября 2018

Поскольку у вас есть класс, параметры не требуются.

class WarningManager {
bool seenWarningA; 

void updateWarnings() {
    pushWarning()
}

void pushWarning() {
    seenWarningA = true;
}
} 

Использование ссылок, а не указателей более элегантно.

class WarningManager {
bool seenWarningA; 

void updateWarnings() {
    pushWarning(seenWarningA)
}

void pushWarning(bool & warning) {
    warning = true;
}
}

Если вы хотите использовать указатели, оператор & просто дает один указатель, а не двойную точку:

class WarningManager {
bool seenWarningA; 

void updateWarnings() {
    pushWarning(&seenWarningA)
}

void pushWarning(bool * warning) {
    *warning = true;
}
} 
0 голосов
/ 03 сентября 2018

Вы, похоже, пытаетесь передать аргумент bool * в функцию, которая принимает bool **. Удалите один из слоев косвенности из списка параметров или добавьте один к значению, которое вы передаете. Либо должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...