Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: webhope 22. 10. 2013, 17:59:01
-
Zdravím, začínám s C++. Snažím se z jedné opensource vytáhnout kód na dekomprimování souboru.
Může mi někdo pomoci s odstraněním těchto chyb? Asi mají stejnou příčinu.
error C2065: 'PSCB_PRECREATE' : undeclared identifier
error C2051: case expression not constant
error C2065: 'PSCB_INITIALIZED' : undeclared identifier
error C2051: case expression not constant
error C2065: 'TOOLTIPS_CLASS' : undeclared identifier
error C3861: 'TooltipInit': identifier not found
error C2065: 'PROPSHEETHEADER' : undeclared identifier
error C2146: syntax error : missing ';' before identifier 'header'
There is this code:
int CALLBACK PropSheetProc(HWND sheet, UINT msgid, LPARAM lParam)
{
switch (msgid)
{
case PSCB_PRECREATE:
{
DLGTEMPLATE *templ = (DLGTEMPLATE*)lParam;
templ->cy += 5;
slovo PSCB_PRECREATE jsem v projektu našel jenom jednou, takže nechápu smysl té hlášky.
A pak se objevuje chybová hláška v souvislostí s funkci
HWND MakeSheet(HINSTANCE app)
error C2065: 'header' : undeclared identifier
For this line:
PROPSHEETHEADER header;
'PSH_MODELESS' : undeclared identifier
error C2065: 'PSH_USECALLBACK' : undeclared identifier
error C2065: 'PSH_NOAPPLYNOW' : undeclared identifier
error C2065: 'PSH_NOCONTEXTHELP' : undeclared identifier
error C2065: 'PSH_USEICONID' : undeclared identifier
error C2065: 'header' : undeclared identifier
Looks similar
Code:
http://paste.ofcode.org/35B57JYGkaJDnct4UkDfGcB
-
slovo PSCB_PRECREATE jsem v projektu našel jenom jednou, takže nechápu smysl té hlášky.
To možná bude ta příčina - mělo by tam být minimálně 2x - jednou deklarované a jednou použité. Nechybí Ti nějaký hlavičkový soubor nějaké knihovny? Co to je za aplikaci a jaké má závislosti (zpravidla se uveřejňují na stránkách té aplikace)?
-
No ale vono tam je vážně jenom jednou. A předtím to jelo bezproblému než jsem tam teda udělal ty změny.
Mohl by ses prosím tě podívat, na ten originál?
http://www.mediafire.com/download/o5yo6o6t91bpcix/aokts-1.0.1_rev-70.zip#!
Je to AOK Trigger Studio v1.0.1 rev70
-
a jedná se o soubor view/aokts.cpp
v originálním projektu jsem našel jednu chybu a to, že je nutno includovat
#include <iterator> // std::back_inserter
hned za #include <functional>
to jen kdyby si to zkoušel spustit.
-
zkusil jsem googlit PSCB_PRECREATE a podle tohoto
http://msdn.microsoft.com/en-us/library/windows/desktop/bb760815(v=vs.85).aspx
se má includnout Prsht.h - máš to tam?
-
Nevím co znamená to header ... Prsht.h
ale autor to v tom originálním projektu nemá a přesto jim to jede... Přijde na to někdo v jakto že mu to jede a mě ne? A jde o to, že ono těch chybových hlášek je více
error C2065: 'PSCB_PRECREATE' : undeclared identifier
error C2051: case expression not constant
error C2065: 'PSCB_INITIALIZED' : undeclared identifier
error C2051: case expression not constant
error C2065: 'TOOLTIPS_CLASS' : undeclared identifier
error C3861: 'TooltipInit': identifier not found
error C2065: 'PROPSHEETHEADER' : undeclared identifier
error C2146: syntax error : missing ';' before identifier 'header'
'PSH_MODELESS' : undeclared identifier
error C2065: 'PSH_USECALLBACK' : undeclared identifier
error C2065: 'PSH_NOAPPLYNOW' : undeclared identifier
error C2065: 'PSH_NOCONTEXTHELP' : undeclared identifier
error C2065: 'PSH_USEICONID' : undeclared identifier
error C2065: 'header' : undeclared identifier
-
Ještě se chci zeptat na toto... Jelikož studuju tento článek
http://www.builder.cz/rubriky/c/c--/ucime-se-winapi-3--156008cz (http://www.builder.cz/rubriky/c/c--/ucime-se-winapi-3--156008cz)
jak vytvořit okno, zajímá mě, jestli je nutné pro vytvoření aplikace win32 vytvářet okno?
Tam se píše, že pomocí CreateWindowEx se vytváří okno. Ve v originálu zmiňovaného projektu, viz výše, se objevuje tvorba oken pomocí CreateWindowEx a CreateWindow a to pro tooltip (TOOLTIPS_CLASS), stavový řádek (STATUSCLASSNAME). V celém projektu se žádné jiné okna nevytváří. Alespoň jsem tedy nenašel další slova začínající na CreateWindow a obsahující tyto klíčové slova.
Takže proto se ptám, mě přijde divné, že se nikde nevytváří okno aokts (tak se jmenuje aplikace). Je to normální? Nebo se okno dá nahradit něčím jiným, například použitím PropSheetData? Protože vidím že v PropSheetData se nachází stavový řádek, menu, prohlížeč mapy, ale nevidím že by jeho součástí byly listy (stránky) aplikace.
-
Zrovna Prsht.h tam k tomu projektu přilinkován je ;-)
V čem to kompiluješ? Ve Visual Studiu? Je tam pro to přímo připravený .sln soubor, pro verzi 2005. Mně kompilace ve 2012 padá na tom, že 1 parametrický konstruktor std::bad_alloc není přístupný. Kdybych měl nainstalovaný kompilátor, který používá verze 2005, pravděpodobně by to asi buildnout šlo.
Každopádně má to pro Tebe nějaký hlubší smysl? Ten kód není špatně napsaný, ale ukázka "best practices" to taky není.
-
Nutné to není. Např. takové ty oblíbené tiché instalace/samorozbalovací archivy/spouštěče nevytváří okno - ani windowsovské, ani konzolové. Každopádně začínat s C++ tím, že hrabeš rovnou na Win32 API ... chlape to je jak kdyby horolezec začínal tím, že by lezl na K2.
-
eMko
Zrovna Prsht.h tam k tomu projektu přilinkován je ;-)
V čem to kompiluješ? Ve Visual Studiu? Je tam pro to přímo připravený .sln soubor, pro verzi 2005. Mně kompilace ve 2012 padá na tom, že 1 parametrický konstruktor std::bad_alloc není přístupný. Kdybych měl nainstalovaný kompilátor, který používá verze 2005, pravděpodobně by to asi buildnout šlo.
Prosím tě kde? Já ten soubor nemohu najít. Používám Visual Studio 2010 Express a většina programátorů co používá AOKTS (ti mi s tím neporadili) to používá taky.
No tak K2 to snad ne. Rozdíl je v tom že si mohu dovolit metodu pokus omyl. Já jen vyhazuju co nepotřebuju. Nepotřebuju ty okna, mě jde jen o to, aby to byla tichá aplikace, skrytá, s možnosti vyhodit chybu pokud selže načítání souboru.
Kde je ten soubor?
-
Nutné to není. Např. takové ty oblíbené tiché instalace/samorozbalovací archivy/spouštěče nevytváří okno - ani windowsovské, ani konzolové. Každopádně začínat s C++ tím, že hrabeš rovnou na Win32 API ... chlape to je jak kdyby horolezec začínal tím, že by lezl na K2.
Tohle určitě podepíšu - pokud se učíš C++ vykašli se na Win32 API. Je to úplný nesmysl... Pokud se chceš učit programovat GUI pro Windows, na to jsou knihovny a frameworky, které jsou výrazně lepší než Win32 API. I stařičká MFC je mnohem lepší varianta... A pokud máš problém s .h souborem nebo 'case' - jakákoli učebnice C nebo C++ určitě pomůže.
-
Kde je ten soubor?
Je vidět v External Dependencies v Solution Exploreru. Je možné, že to VS 2010 zobrazuje jinde nebo že to Expresska nezobrazuje vůbec.
Já jen vyhazuju co nepotřebuju.
To není nejlepší přístup - riskuješ, že Ti tam zbude spoustu mrtvýho kódu, který dokáže akorát tak udělat binec. Spíš lokalizuj co potřebuješ a to vytáhni ven. Co konkrétně potřebuješ?
BTW víš, že je to licencované pod GNU GPL a tím pádem pokud z toho něco zkopíruješ do svého projektu, tak to budeš muset licencovat pod GNU GPL?
-
Michal Kovacic:
Jak jsem psal nehodlám vůbec dělat GUI.
eMko:
Vcelku si věřím. V tom aokts.cpp potřebuju akorád spustit funkci FileOpen ... na otevření sccénáře. Viz
scen.open(setts.ScenPath, setts.TempPath)
Nechci aby ta aplikace byla vidět, to že běží. Samozřejmě že AOKTS má připravené nějaké chybové hlášky a s těmi musím počítat aby v případě chyby vyskočilo chybové okno.
Není mi úplně jasný proč je tam nastavení cesty přes soubor s nastavení (settings), dejme tomu, že bych přidal ještě jeden argument, který by definoval cestu přímo.
-
A nevíš jak zjistit kde se ten prs ht.h includuje :-) ? Já ho vidím v Ex. dependencies ale nevím kde se includuje nebo jak to je propojené. Jak tu závislost vytvořit i v mojem projektu.
A díky za informace o tom GNU. To mi nevadí. Rád budu sdílet.
-
Tak jsem zjistil, že ten soubor tam mám v těch ext. dep. ale stejně jako by nebyl... Tak ho do aokts.cpp iincluduju manuálně:
#include "c:/program files/microsoft sdks/windows/v7.0a/include/prsht.h"
Mám tam ještě pár chyb vesměs undeclared identifier nebo identifier not found
a to v souvislosti s Tolltips (to ale nepotřebuju, takže mohu odstranit).
A chci se zeptat jestli Sheet_HandleCommand náhodou neobsluhuje Accelerators? Protože příkaz
case ID_FILE_OPEN:
FileOpen(sheet, true, -1);
break;
ID_FILE_OPEN je definován v common.rc jako id menuitem pro otevření souboru...
Čili zde bych potřeboval radu, jak místo tohoto způsobu (switch (id) ... case ... ID_FILE_OPEN) to zprovoznit tak, abych mohl v budoucnu použít volání funkce FileOpen s parametrem cesta k souboru? Momentálně to má fungovat přes menu, které jsem zrušil.
-
Ještě tady mi to hází chyby:
http://paste.ofcode.org/yeuwweRTq2riCg6FZj4afJ
Tj. tam kde se objevuje return CALLPROC();
r:\++informace\+pc improve\c++\source codes\aokts-1.0.1-r70_convertor\view\aokts.cpp(950): error C2065: 'pproc' : undeclared identifier
r:\++informace\+pc improve\c++\source codes\aokts-1.0.1-r70_convertor\view\aokts.cpp(957): error C2065: 'pproc' : undeclared identifier
r:\++informace\+pc improve\c++\source codes\aokts-1.0.1-r70_convertor\view\aokts.cpp(963): error C2065: 'pproc' : undeclared identifier
r:\++informace\+pc improve\c++\source codes\aokts-1.0.1-r70_convertor\view\aokts.cpp(976): error C2065: 'pproc' : undeclared identifier
r:\++informace\+pc improve\c++\source codes\aokts-1.0.1-r70_convertor\view\aokts.cpp(998): error C2065: 'pproc' : undeclared identifier
-
Tohle opět vypadá na okenní kód. Hele, klasický postup je lokalizovat jen to, co potřebuješ a to zkopírovat a upravit - přináší to lepší výsledky za méně práce. Máš méně kódu, ve kterým se musíš orientovat.
-
Tak tu chybu se mi povedlo vyřešit, stačilo odkomentovat DLGPROC pproc;. Ale stejně by mě zajímalo proč to hází tu chybu u tooltipů i když je nepotřebuju a chystám se to zakomentovat. Prostě mi to nedá.
error C2065: 'TOOLTIPS_CLASS' : undeclared identifier
// Add a tooltip window
HWND tooltip;
tooltip = CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, "AOKTS Tooltip", WS_POPUP,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,
sheet, NULL, aokts, NULL);
TooltipInit(tooltip);
Vždyť na stránkách MS taky neuvádí že by se to mělo nějak předdefinovat.
http://msdn.microsoft.com/en-us/library/windows/desktop/bb760250%28v=vs.85%29.aspx (http://msdn.microsoft.com/en-us/library/windows/desktop/bb760250%28v=vs.85%29.aspx)
-
3 sekundy na MSDN (a případná omluva, pokud je chyba ještě někde jinde):
#include <commctrl.h>
-
Tohle není dobrý způsob jak se seznámit s C++. Naložil sis moc nových věcí najednou. Nejdřív se zlepši v C++ a potom se (pokud budeš chtít a přijde ti to užitečné) ponoř do WinAPI.
Takhle ti odlaďovat naprosté drobnosti a úplně základní věci v diskuzi, to není žádný med.
-
webhope webhope: ty raději neprogramuj a nebo zůstaň u CLI aplikací... nejdřív se nauč najít podstatný rozdíl mezi C a C++... to co tady ukazuješ je WIN32API C kod žádné pojebané C++ asi soudíš podle toho že to má koncovku *.cpp oh god why...
-
tyvole:
Ty se radši neexhibuj a mluv tady slušně. Na sprosté výrazy a urážení tady není nikdo zvědavý.
-
tyvole:
Ty se radši neexhibuj a mluv tady slušně. Na sprosté výrazy a urážení tady není nikdo zvědavý.
Hmmm...
Plně souhlasím s tím, že nkteré výrazy jsem nepatří, nicméně plně s tyvole souhlasím. Včera jsem napsal něco velice podobného a pak jsem to smazal - nemá to smysl.
Prokázal jsi naprostou neznalost základů programování v C, nepochopení rozdílů mezi C a WIN32API a nenecháš si poradit - pak doporučuji obrnit se proti ostřejším odpovědím.
Doporučuji se držet klasiky a přečíst - pozorně:
* "The C Programming Language. Brian W. Kernighan, Dennis M. Ritchie. Prentice-Hall, 1978. ISBN 0-13-110163-3" nebo
* "The C Programming Language, Second Edition. Brian W. Kernighan, Dennis M. Ritchie. Prentice-Hall, 1988. ISBN 0-13-110370-9"
a pak se možná začít ptát. České vydání někde bude také - viz google.
-
tyvole:
Ty se radši neexhibuj a mluv tady slušně. Na sprosté výrazy a urážení tady není nikdo zvědavý.
Sice to tyvole napsal nevhodně, ale na rozdíl od mnoha jiných nevkusných příspěvků na internetových fórech, tento obsah stále má. Zakryj si vulgarismy a jeho příspěvek si přečti, obsahuje pro Tebe velmi cenné rady.
Potřetí a naposledy píši, že jdeš na to ze špatného konce. Programovat v C a C++ se dá naučit, bohužel ne tímto způsobem.
-
Čtení jsem ukončil u hlášky
A předtím to jelo bezproblému než jsem tam teda udělal ty změny.
a zbytek času věnoval otírání poprskaného monitoru od kafe. :D ;D :D ;D
-
slovo PSCB_PRECREATE jsem v projektu našel jenom jednou, takže nechápu smysl té hlášky.
To možná bude ta příčina - mělo by tam být minimálně 2x - ...
já se zase bavil tady. taková správně "suchá" odpověď :-)
když nerozumím tomu co na mě kompilátor křičí, tak to se prgoramuje blbě v čemkoliv, nejen v C. Jediný řešení je pak programovat bez chyb ;-)
-
Zdravím, začínám s C++. Snažím se z jedné opensource vytáhnout kód na dekomprimování souboru.
...
Zvědavost mi nedala a tak nějak nechápu co tam s tím děláš.
Zkompilováno MS Visual C++ 2008. release verze. na debug tam není přiložená zlib1d.lib (debug verze).
Jinak to dekomprimování/komprimování souboru kdybys koukl do zdrojáků, tak bys našel v zlibfile.h/cpp,
kde jsou dvě funkce (deflate_file, inflate_file) zakrývající implementaci knihovny zlib1.
-
Jholas:
Jinak to dekomprimování/komprimování souboru kdybys koukl do zdrojáků, tak bys našel v zlibfile.h/cpp,
kde jsou dvě funkce (deflate_file, inflate_file) zakrývající implementaci knihovny zlib1.
Tak zrovna tohle jsem udělal hned na začátku. Ale už si s tím nelámej hlavičku :-) Dík za zapojení