Kezdőlap › Fórumok › Programozás › wxWidgets vs. UHU 2.0
- This topic has 10 hozzászólás, 3 résztvevő, and was last updated 18 years, 6 months telt el by
pointux.
-
SzerzőBejegyzés
-
2006-12-28-22:17 #2084209
csatolok egy igen konkret kimenetet. (lehet, hogy a sorok szama az elozo csatolt allomannyal nem fog pontosan egyezni)
2006-12-29-09:00 #2084210Code:hworld.cpp:40: error: conversion from `const char[12]’ to `const wxString’ is ambiguousNem lehet a karakter tömböt (a) int címet / b)int számot) konvertálni, mert kétértelmű.
Kód: (cím, érték a címen)
0x25368698: ‘s’
0x25368699: ‘t’
0x25368700: ‘r’
0x25368701: ‘i’
0x25368702: ‘n’
0x25368703: ‘g’
0x25368704: 0Paraméter: (amit megkap a függvény)
0x25368698a)
Ez egy cím.
Pl:
Kiíratás a képernyőre: [0x25368698]
Kiíratás a képernyőre: [0x25368699]
…Eredmény:
user@localhost ~$ stringb)
Ez egy szám.
Pl.:
Összeg = 0x25368698 + 1
Kiíratás: Összeg (hexa számként)
Eredmény:
user@localhost ~$ 0x25368699Akkor, hogyan?
(wxString) int_szam
Akkor a eset. (A függvényt kell figyelembe venni a fordítónak.)(Az c++ oo cucc átka. ;D)
2006-12-29-21:05 #2084211Ugy tunik, a problema nem ilyen egyszeru. Vagyis probaltam mar minenfele cast-operatorral, de nem jutottam sokra. Ha sima wxChar-ra castolotm a karakterlancokat (tudom, nem mukodokepes), DE akkor lefordul a program, viszont a karakterlancok helyen egy rakas kerdojel jelenik meg. Erdekes modon nem segfaultol el.
Kozben utananeztem, hogy mi is van a megadott helyeken a string.h-ban. A kovetkezo constructorok kozott nem tud valasztani a fordito:633:
// these methods are not implemented – there is _no_ conversion from int to
// string, you’re doing something wrong if the compiler wants to call it!
//
// try `s << i' or `s.Printf("%d", i)' instead
wxString(int);644:
// string containing nRepeat copies of ch
wxString(wxChar ch, size_t nRepeat = 1)
: wxStringBase(nRepeat, ch) { }Elolvasva a megjegyzest az elsohoz, a problema egyre furcsabbnak tunik. ???
2006-12-29-21:56 #2084212Nem úgy van az, hogy csak minden izé nélkül…
Bár én nem a wx-et, hanem gtk+-t szoktam használni, de gondolom a wx is támogatja az utf-et (még, ha legjobban windózkompatibilis is). Ennek következtében a sima karakterlánc nem sima karakterlánc.
Továbbmenve ez a bizonyos karakterlánc objektum soha nem a karakterlánc címét jelenti, hanem a karakterlánc tartalmú objektum címét.
Tehát pl. String = int_karakterlánc, nem egy értékadás, hanem egy függvény (így ebben a formában operátorral), mely átkonvertálja az int típusú karakterláncot arra a speciális utf stringre. A kiíratással ugyanez a helyzet (fordítva). (Szerintem ez a wxStringgel sincs másképp.)
(A típuskonverció akkor működik helyesen, ha azt konvertálod, ami konpatibilis… ezt meg neked kell tudni.)Szóval a dokumentumokat nézegesd a megoldásért. (Kár találgatni, amikor olvasni is lehet.)
Mivel nem használom, ezért konkrétan, csak glibes ustring-es példát tudnék csak mondani, de minden bizonnyal hasonlóan működik ez is…Én csupán a technikai részleteket próbáltam megosztani, hogy miért csinálja. Az, hogy milyen „csicsát” okoz a függvény, meg milyen körítést vár, az a doksiban le van írva.
2006-12-29-22:05 #2084213Ezzel mind egyetertek. A nagyon nagy gondom az, hogy ezt a programot egy az egyben egy wxwidgetes oldalrol szerdem le, mint a „Hello world” program wxwidgetben. Es mint irtam, uhu 1.2 alatt siman lefordul, uhu 2.0 alatt mar nem (hanem azt a fura hibat produkalja). Ezert vagyok egy kicsit megakadva rajta, hogy nem megy. (Ha en irtam volna, akkor magamban keresnem a hibat — habar nem kizart, hogy most is tennem van)
2006-12-29-22:15 #2084214Más a wx verzió, más a fordító.
Pl. lehet olyan kódos írni, mely gcc-vel lefordul, g++-szal nem (minden ugyanaz a verzió), és viszont. (Az egyikkel max. egy warningot produkál (vagy azt sem), a másikkal nem fordul.)
Sőt a legtöbb kódban előfordul ilyesmi. Pl. úgy gondolnád, hogy egy c programot simán lefordítasz egy c++ fordítóval, de ez nem igaz… a legtöbb c kód nem kompatibilisen van megírva, noha meg lehetne úgy írni. (De pl. senki nem szeret fölöslegesen gépelgetni, mert a c kód típus konverciójánál elszáll a c++ fordító… Kit érdekel! Ne azzal fordítsd. ;D)Ebből kiindulva pl. én egy c++ kódhoz biztosan nem c fordítót használnék… alapból. (Noha a kiterjesztés miatt tán azt „veszi elő”, de jobb az óvatosság.)
2006-12-29-22:43 #2084215Megyek meg dokumentaciot olvasni, mert leszedtem egy masik peldaprogramot, ami mar mukodott. Ebbol kilestem, hogy hogyan kell a karakterlancokat helyesen hasznalni wxWidgetsel. Tehat a sima
Code:„karakterlanc”helyett mindenutt
Code:_T(„karakterlanc”)-ot kell hasznalni. Hogy miert, pontosan nem tudom, de ugy mukodik
2006-12-30-08:04 #2084216„-ot kell hasznalni. Hogy miert, pontosan nem tudom, de ugy mukodik”
Az a gettex lesz… (minden bizonnyal… a doksiban benne kell, hogy legyen)
_T(String) gettext (String)Vagyis gettext(„karakterlánc”)
ami behelyettesíti a „karakterlánc” C szöveg helyére a lokalizációs file-ban szereplő xx_YY nyelvű szöveget.Hogy miért működik?
Lehet, hogy azért, mert a gettext nyílván (utf) char*-ot csinál a te char[X]-edből.2006-12-31-19:33 #2084217Kiprobaltam, hogy mire helyettesitodik be ez a makro. Gyakorlatilag
Code:_T(„valami”)helyett
Code:L”valami”jelenik meg a forrasban (ez ugy probaltam ki, hogy csak a preprocesszort engedtem ra a forrasra 😉
Igy van ertelmezve:
Code:// —————————————————————————-
// define _T() and related macros
// —————————————————————————-// BSD systems define _T() to be something different in ctype.h, override it
#if defined(__FreeBSD__) || defined(__DARWIN__)
#include
#undef _T
#endif// could already be defined by tchar.h (it’s quasi standard)
#ifndef _T
#if !wxUSE_UNICODE
#define _T(x) x
#else // Unicode
#define _T(x) L ## x
#endif // ASCII/Unicode
#endif // !defined(_T)// although global macros with such names are normally bad, we want to have
// another name for _T() which should be used to avoid confusion between _T()
// and _() in wxWindows sources
#define wxT(x) _T(x)2007-01-01-10:37 #2084218 -
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.
legutóbbi hsz