Параметр метода c ++ меняет себя только в режиме релиза на linux - PullRequest
0 голосов
/ 20 февраля 2020

в c ++ h файле:

bool getIntValue(QString name,int& dest,int default_value,bool set_default=true);

в c ++ cpp файле:

bool CoinConfig::getIntValue(QString name, int& dest, int default_value, bool set_default)
{
    qDebug() << "1 getIntValue set_default=" << set_default;
    if (_Platform_Config->contains(name)) {
        dest = _Platform_Config->value(name).toInt();
        qDebug() << "2 getIntValue dest" << dest;
        return true;
    }
    else if (set_default) {
        qDebug() << "3 set_default=" << set_default;
        qDebug() << "4 getIntValue dest default" << dest;
        dest = default_value;
        qDebug() << "5 getIntValue dest default" << dest;
        return false;
    }
}

///////////////// /////// выполнить следующий код:

int b;
getIntValue("timer", b, -1, false); //_Platform_Config->contains(name) return false

получил вывод:

1 getIntValue set_default = false  // at first set_default is false 
3 set_default= true                // change to true  ???   
4 getIntValue dest default 1000
5 getIntValue dest default -1
b 2 -1

Параметр set_default изменился с false на true !!! система linux, в режиме отладки это правильно, но в режиме выпуска это ошибка.

почему?

1 Ответ

0 голосов
/ 20 февраля 2020

В getIntValue отсутствует оператор возврата. Попробуйте добавить return true или return false в конце функции:

bool CoinConfig::getIntValue(QString name, int& dest, int default_value, bool set_default)
{
    qDebug() << "1 getIntValue set_default=" << set_default;
    if (_Platform_Config->contains(name)) {
        dest = _Platform_Config->value(name).toInt();
        qDebug() << "2 getIntValue dest" << dest;
        return true;
    }
    else if (set_default) {
        qDebug() << "3 set_default=" << set_default;
        qDebug() << "4 getIntValue dest default" << dest;
        dest = default_value;
        qDebug() << "5 getIntValue dest default" << dest;
        return false;
    }
    return false; // <--- this is missing in your code
}

Я рекомендую включить предупреждения компилятора, тогда проблема будет легко найдена:

prog.cc: In function 'bool getIntValue(QString, int&, int, bool)':
prog.cc:27:1: warning: control reaches end of non-void function [-Wreturn-type]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...