Re[8]: Задолбало гццой
От: MikelSV http://www.centerix.ru
Дата: 12.12.09 15:20
Оценка:
Здравствуйте, wander, Вы писали:

MSV>>HLString : public LString

MSV>>в LString есть operator MString().

MSV>>---

MSV>>теперь вызывается с (MString&)lsret; но это как вы можете увидеть явный вылет, зато гцц не ругается.
MSV>>operator MString() -> MString& -> неверный указатель на память.

W>Покажите хотя бы кусок цельного кода. Так не ясно что вы пытаетесь сотворить.


MSV>>Вызов при котором даже в студия вылетает, что естественно:

MSV>>Drawn((MString&)(HLString()+"Uncnown command '"+comm+"'\r\n\r\n"));

W>Покажите как operator+ реализован.




Кода много, не знаю, что именно показывать.

В данном случае единственный вариант реализации operator+ может быть:
HLString& operator+(const MString& string){...}
Это строковый класс, он прибавляет текст у уже записанному в нем.
Собственно тут все просто, класс собирает текст в строку и возвращает ее через operator MString().

Кстати этот код работает:
Drawn((HLString()+"Uncnown command '"+comm+"'\r\n\r\n").operator MString());
Но я за то, чтобы компилятор сам догадывался о типах и не нужно было дописывать .operator MString().

В Drawn текст ждут в виде const MString&.
Все просто.

В случае:
Drawn((MString)(HLString()+"Uncnown command '"+comm+"'\r\n\r\n"));
гцц не понимает указания.

По идее главная ошибка в том, что гцц не понимает, в каком типе передавать из HLString& в MString.
У HLString есть:
operator MString();
operator char*();

Этакая слепота. Ну не могу поверить, что он не может понять, что нужно передать из HLString& 'operator MString()' в MString 'MString(const MString&)'.
Варианты для гцц также мучил в студии. Все нормально понимаются. Жесткое следование стандартам — зло.
Римское правило. Тот, кто говорит, что Это не может быть сделано, никогда не должен мешать тому, кто Это делает.
Осень, ну вы поняли.
Зачем еще один код? А человек?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.