Форум: "Потрепаться";
Текущий архив: 2003.08.11;
Скачать: [xml.tar.bz2];
ВнизОпять проблема в Си, только странная... Найти похожие ветки
← →
VEG (2003-07-25 22:12) [0]Имеются классы:
class icfg {
public:
icfg ( string sGroup, string sParam, int iDefault );
icfg& operator = (const int val);
operator int() const;
private:
int& liValue;
};
class scfgidx {
public:
scfgidx ( string sGrp, string sPar, string sDef, uint iLen=3, uint iForm=10 );
string& operator [] (const int idx) const;
private:
icfg iCount; //Переменная предыдущего класса
string sGroup;
string sParam;
string sDefault;
uint iIdxLen;
uint iIdxFormat;
};
scfgidx::scfgidx ( string sGrp, string sPar, string sDef, uint iLen,uint iForm ):
iCount( sGrp, sPar, 0 )
{
sGroup = sGrp;
sParam = sPar;
sDefault = sDef;
iIdxLen = iLen;
iIdxFormat = iForm;
}
string& scfgidx::operator [] (const int idx) const
{
if( iCount < idx )
iCount = idx; // Почему-то выдает ошибку: [C++ Error] Config.cpp(64): E2285 Could not find a match for "icfg::operator =(int)"
/* // Если использую переменную этого класса, созданную в этом коде, то все ок!
icfg iCnt ( sGroup, sParam, 0 );
if( iCnt < idx )
iCnt = idx; // В этом случае тут проходит...
*/
return Config.GetLnk( sGroup, sParam+ItoS( idx, iIdxLen, iIdxFormat ), sDefault );
}
В чем проблема?
← →
VEG (2003-07-25 22:36) [1]Если таким же образом обращаюсь к переменной из scfgidx::scfgidx ( string sGrp, string sPar, string sDef, uint iLen,uint iForm ), то все работает. Что это значит?
← →
Suntechnic (2003-07-25 22:42) [2]>VEG ©
Ну ты молодец. Объявил перегруженный оператор, как константную ф-циюstring& operator [] (const int idx) const;
, а потом удивляешь чего это она вдруг переменную класса поменять не может.
И ещё... Что возвращаетConfig.GetLnk
? Я так полагаю, что переменную типа string? Если string, тогда этот код в высшей стпепени некорректен. Если ссылку на string, то всё равно выглядит как-то подозрительно :)
← →
VEG (2003-07-25 22:45) [3]>Suntechnic
Спасибо!
GetLnk - название говорит само за себя - взять ссылку:)
← →
VEG (2003-07-26 17:48) [4]Но вот нашел у себя высшей степени некорректнось:) Функция должна возвращать ссылку на string. Я полагаю, что return str будет некорректным решением. Как правильно?
← →
Suntechnic (2003-07-26 18:47) [5]>VEG © (26.07.03 17:48)
Как правильно?
Я не знаю как правильно, потому, что я не знаю что тебе нужно... но зато я знаю как не правильно. Грубейшая ошибка в данном случае пытаться вернуть ссылку на автоматическую переменную типа string. Автоматическая переменная будет уничтожена при выходе из области видимости т.е. по окончании работы ф-цци, возвращая ссылку на эту переменную ты возвращаешь ссылку на не существующий объект.
← →
VEG (2003-07-26 18:56) [6]Значит у меня правильно: тот string, на который я передаю ссылку, существует на протяжении работы всей программы.
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2003.08.11;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c