Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: webhope 06. 11. 2013, 11:22:23
-
Zdar,
mám to ve Visual Studiu Express 2008. Založil jsem si nový projekt win32 console app, vybral jsem Console Applicaiton a zrušil jsem precompiled header. Vložil jsem kód:
http://paste.ofcode.org/zkuqiGRSXkqpCTR7dS8JnG (http://paste.ofcode.org/zkuqiGRSXkqpCTR7dS8JnG)
A vono to píše unresolved dependencies a že tam je prý nějaký symbol _main který tam ale v kódu nikde nevidím.
MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
S:\TEMP\C++\lesson03\Debug\lesson03.exe : fatal error LNK1120: 1 unresolved externals
A tady je ten tut: kód je dole. Rozdíl je v tom, že oni includují main.h kvůli tomu aby načetli windows.h což jsem ale dal do jednoho souboru.
http://www.builder.cz/rubriky/c/c--/ucime-se-winapi-zaciname-156002cz (http://www.builder.cz/rubriky/c/c--/ucime-se-winapi-zaciname-156002cz)
V čem je teda problém? Ty předchozí lekce jsem četl.
-
:( Čert aby se v tom tutorialu vyznal ???, tak on tam nejdříve píše: vytvořte Console project a pak že mi to nejede, když to obsahuje WINAPI WinMain .... Příště se budu raději řídít svým vlastním úsudkem a vytvořím rovnou projekt Win32 windows.
-
Už jsme Ti tu někde psali, že je potřeba pořádně číst ty chybové hlášky z kompilátoru.
error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
"unresolved" znamená nenalezen. To, že jej tedy nikde nevidíš, není překvapující - kompilátor taky ne ;-) .
Správně jsi napsal, že máš vytvořit Win32 projekt, ne Console application. Viz ten tutoriál
Ve Visual C++ ("File -> New ->Projects") typu Win32 Application, dále zvolíme "prázdný projekt",
Hláška o tom, že máš spustit Console Wizard, se týká Borland C++ builderu, pro Visual Sudio platí to, co je v citaci.
-
Už jsme Ti tu někde psali, že je potřeba pořádně číst ty chybové hlášky z kompilátoru.
error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
"unresolved" znamená nenalezen. To, že jej tedy nikde nevidíš, není překvapující - kompilátor taky ne ;-) .
Unresolved symbol je hláška linkeru, takže většinou když se objeví, tak se ten symbol někde v kódu vyskytuje. Problém u linker errorů bývá, že jsi něco deklaroval ale nedefinoval, nebo že nelinkuješ nějakou knihovnu.
Unresolved symbol u symbolu, který v programu nepoužíváš se ti objeví jen v případě, že zapomeneš linkovat nějakou systémovou knihovnu. A nebo samozřejmě zapomeneš linkovat knihovnu, která je používána jinou knihovnou, kterou linkuješ.
-
Konzolová aplikace používá jako vstupní bod funkci main. Ta tu ale není a proto linker řve, že ji nemůže nalézt. Ta ukázka je totiž pro Win32 aplikaci, kde je vstupním bodem (u MS klasicky v rozporu s ISO C++) funkce WinMain.
-
Unresolved symbol je hláška linkeru
Myslím, že zrovna webhope to moc nerozlišuje :-)
-
Zdravím, mám celkem tři kódy na práci s fstream. Všechny tři se daří úpěšně nakomplilovat, avšak z nějakého důvodu mi nefunguje nejspíš to otevření souboru.
Tedy příklad:
std::ifstream ifs ("test.txt", std::ifstream::in);nebo
ifstream ifs("in.txt");Zdá se mi, že ani jedno ifs neobsahuje otevřený objekt. Respektive, v tom prvním kódu
ifs.fail() vrací true. Takže bych rád přišel na to v čem je problém. Jen podotýkám, že soubor obsahuje české znaky.
Doposud jsem pracoval s kódy, které mi fungovali a tedy načítali ty data ze souborů, ale tady to prostě nejde.
1. http://paste.ofcode.org/dekmDHmYfJybaTEKTCa83t
2. http://paste.ofcode.org/pT4MXeXpuXxq8g8sU8cw2u
3. http://paste.ofcode.org/EvUF6V5ANmAhiqpwKKvZdM
-
Zdravím, mám celkem tři kódy na práci s fstream. Všechny tři se daří úpěšně nakomplilovat, avšak z nějakého důvodu mi nefunguje nejspíš to otevření souboru.
Tedy příklad:
std::ifstream ifs ("test.txt", std::ifstream::in);nebo
ifstream ifs("in.txt");Zdá se mi, že ani jedno ifs neobsahuje otevřený objekt. Respektive, v tom prvním kódu
ifs.fail() vrací true. Takže bych rád přišel na to v čem je problém. Jen podotýkám, že soubor obsahuje české znaky.
Doposud jsem pracoval s kódy, které mi fungovali a tedy načítali ty data ze souborů, ale tady to prostě nejde.
1. http://paste.ofcode.org/dekmDHmYfJybaTEKTCa83t
2. http://paste.ofcode.org/pT4MXeXpuXxq8g8sU8cw2u
3. http://paste.ofcode.org/EvUF6V5ANmAhiqpwKKvZdM
Obsah souboru je istreamům úplně jedno, dokud ho nezačnete zpracovávat. Podle mě je tam problém jednoduše v tom, že ten soubor neexistuje, resp. se nachází jinde, než ho ten program hledá.
-
jak bych mohl zjistit pracovní cestu?
-
První kód funguje.
Druhý kód funguje, ale zapíše do souboru nějaké číslo. Proč?
int i; // File modes
ifs >> i; // in, out, ate, app, trunc, binary
ofs << i;
Ve zdrojovém souboru je text ne čísla.
Třetí kód zdá se že nedělá nic (žádný text se nezobrazuje).
-
jak bych mohl zjistit pracovní cestu?
Ve WinAPI je na to metoda http://msdn.microsoft.com/en-us/library/aa364934%28v=vs.85%29.aspx .
Na linuxu funguje
#include <unistd.h>
char *getcwd(char *buffer, size_t size);
což je sice C, ne C++, ale fungovat bude.
Ještě se dá zavolat metoda ze stdlib
char* path;
_get_pgmptr(&path);
printf(path);
http://msdn.microsoft.com/en-us/library/24awhcba%28v=vs.110%29.aspx
Osobně bych preferoval tu první možnost, volat WinAPI.
-
Jak jsi správně napsal, řiď se raději vlastním úsudkem. Takové bezplatné tutoriály píší lidé, kteří na to mají čas. Nebo přesněji řečeno, kteří neumí svůj čas zpeněžit efektivněji než psaním tutoriálů. Výjimky možná jsou weby jako flipcode.org, ale ty zase nejsou pro úplné záčatečníky a takových webů ubývá. Pro nějaké obecné seznámení s C++ pro úplného začátečníka je nejlepší konzolová aplikace a příklady typu setřiď pole a vypiš na konzolu. Pro naučení GUI aplikací je Windows je nejlepší tutorial přímo od Microsoftu v MSDN, protože oni mají zájem aby tutoriál fungoval a dával smysl.
-
xavyer: asi máš pravdu. No pohleď na toto:
http://paste.ofcode.org/3aDpeurZnRVAr4dvTRvKrwL
z článku o paměťových kódech. Naprostý nonsense. Kód sice jede, ale k čemu. Fakt jako do tutoriálů dávat takové nesmyslné kódy, jen to člověka zmate, co tím chtěl vlastně autor říct.
-
Poznámka: ty poznámky do kódu jsem vložil já aby z toho aspoň trochu bylo jasné co to dělá.
-
No pohleď na toto:
http://paste.ofcode.org/3aDpeurZnRVAr4dvTRvKrwL
// 3 - Size of buffer (it is 1000*8 bites)
yes, to "bite" (= kousnout, uštnkout) místo "byte" celkem sedí :-) . Jinak kód mi nepřipadá prvoplánově nesmyslný - demonstruje na něm jak funguje posílání věcí do streamu. Z jakého tutorialu je, nebo z jakého kontextu jsi ho vzal? Taková se streamy je téměř denní chleba v prostředích jako je C++, Java nebo C#.
-
"Paměťové proudy v C++"
Povšimni si věty "V dalším příkladu předvedu jak zapisovat za konec řetězce."
Místo aby proběhl nějaký zápis, tak to celé selže. Kdyby ten ukázkový kód byl dobrý, tak by měly fungovat obě možnosti if bloku podle toho jak dlouhý text zadáš. Což se očividně neděje. A prý se už dnes strstream nepoužívá, takže mám použít stringstream.
-
Tak zrovna označení strstream za deprecated má smysl, viz http://stackoverflow.com/questions/2820221/why-was-stdstrstream-deprecated .
Jinak co se týče zvlášť českých programovacích tutoriálů, víc než kde jinde platí "what you pay is what you get". Navíc v dnešní době se stačí podívat různě po internetu a získat i dobré knihy zadarmo (odkazy sem samozřejmě dávat nebudu, ale stačí použít google - "název knihy".pdf)
-
Nevíte někdo kdo napsal seriál o C/C++ na builderu cz? Je tam jeden článek:
http://www.builder.cz/rubriky/c/c--/pole-s-libovolnym-intervalem-indexovani-v-c--155896cz
který obsahuje nefunkční odkaz na array.h (údajně obsahuje detailní poznámky k projektu) tak by mě zajímalo kde tenhle soubor stáhnout.
-
Tak to je hustý, mě se povedlo najít zálohu z roku 2002:
http://web.archive.org/web/20020330155834/http://www.builder.cz/data/array.h
tuhle stránku všem vřele doporučuju, až budete hledat nějaký dokument na starém nefunkčním linku.