Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
14-33324
Nil
2003-07-24 20:03
2003.08.11
По моему ребятам из Мелкософт пора в дурку


14-33283
Ross
2003-07-23 10:42
2003.08.11
Delphi6 + MySQL


6-33257
Алексей
2003-05-14 16:31
2003.08.11
Сетевой пользователь на моём компе...


1-33096
Kaylang
2003-07-29 17:01
2003.08.11
Убрать рельефность кнопки


4-33406
Joker
2003-06-08 11:17
2003.08.11
Как послать сообщение в Winamp





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский