#2 gna
Díky! Bohužel už se pracuje na přesunu webu na jiný hosting, tak to nepoužiji, ale díky za čas strávený hledáním :)
Příspěvky odeslané z IP adresy 212.4.134.–
Zdravím ve spolek.
Implementuji EET na starou verzi PHP a narazil jsem problém. Potřebuji použít PHP funkci openssl_sign se čtvrtým parametrem OPENSSL_ALGO_SHA256, což ale PHP ve verzi 5.2.17 nezná.
Existuje nějaký způsob jak to vyřešit?
Děkuji.
Vyřešeno díky této stránce. Doufal jsem, že pokud překládám svoji MySDL knihovnu staticky, že už do svého projektu znovu SDL linkovat není třeba. Ale potřeba to je a co je hlavní, je potřeba nejdříve nalinkovat MySDL a až pak SDL - já to zkoušel jen opačně.
Nevíte náhodou někdo, jak (pokud to jde) udělat, aby stačilo nalinkovat jen moji MySDL knihovnu?
Zdravím,
mám problém se statickým linkováním a potřeboval bych poradit.
Dělám program v C++ s využitím SDL (IDE mám QtCreator). Chtěl bych si udělat statickou knihovnu pracující s SDL (nazvu ji např. MySDL) abych ji mohl používat v dalších programech.
Při pokusu o vytvoření a překlad knihovny MySDL problém není, ale když pak vytvořím program do kterého staticky nalinkuji svoji knihovnu a chci ho přeložit, tak mi vypíše chyby typu "undefined reference to SDL_Init" atp.
Chápu to tak, že při překladu MySDL problém není, protože tam SDL nalinkované mám, ale pak při překladu svého programu problém je, protože u vytvořené knihovny už knihovna SDL není.
Jak bych měl problém vyřešit? Jde přeložit MySDL tak, aby obsahovala i knihovnu SDL nebo mám někam přiložit nějaký soubor? Díky
#4 Ovrscout
Díky za vyčerpávající odpověď. Práce s pointery a referencemi atp. je mi jasná. Problém má jen tady v tom includování. Popravdě si myslím, že hlavní problém bude spíš v logickém návrhu - zkušenější C-čkař by to asi navrhl lépe. Já sice s OOP zkušenosti mám, ale jen z PHP, kde je to úplně jiné a includování nemusím řešit.
Problém už jsem více-méně vyřešil a to dvojím způsobem. Za prvé jsem špatně chápal dopřednou deklaraci. Já myslel, že stačí dát jen to class Class1; a nemusím tu třídu includovat. Ale když jsem tam to #include nechal a navíc přidal tu deklaraci, tak to funguje. Bohužel mi moc není jasné proč (vždyť tam to problémové #include zůstalo), ale snad mi to časem dojde.
Druhá změna byla v tom návrhu - měl jsem tři třídy na úrovni "vedle sebe", ale nakonec jsem to udělal tak, že jedna hlavní si vytváří instance těch dvou dalších.
Jak říkám, problém asi nejčastěji bude ve špatném návrhu těch tříd - častěji se mi stává, že něco vymyslím a pak to poměrně razantně předělám.
Ještě jednou díky :)
Díky, ale...
#pragma once
Nepomohlo - žádná změna. Pokud vím, tak toto používá IDE od Microsoftu, že? Já mám Qt IDE a tam je to řešeno přes:
#ifndef CLASS_H
#define CLASS_H
#endif // CLASS_H
Jinak co je dopředná deklarace vím - jen, jak jsem psal v prvním postu, jsem ji nikdy nemohl použít, protože při jejím použití chce překladač i hlavičkový soubor.
Zdravím,
jsem začátečník v C/C++ a mám velký problém s pochopením toho, jak se mají správně navzájem includovat spolu související třídy.
Resp. možná s tím, jak používat globální hlavičkový soubor.
Jde o to, že mám např. třídy Class1 a Class2, kdy jedna využívá druhou a druhá tu první. V jedné z nich mám ale třeba includovaný ještě nějaký globální hlavičkový soubor (který includuji skoro všude).
Teď si ani nejsem jestli jestli je problém v tom, že chci includovat Class1 k Class2 a naopak a nebo až v tom, že dochází k opakovanému načítání toho globálního .h souboru.
Narážím na to pořád dokola a přestože to vždycky nějak o*ebu, tak mě vadí, že to je základní věc a já se s tím musím pořád prát. Knížek už jsem přečetl několik a různých tutoriálů na netu taky, ale tam se řeší jednodušší případy.
K tomuto problému jsem četl i jeden velmi kvalitní článek (myslím že na http://www.cplusplus.com/forum/) kde byla hromada problémů vysvětlena, ale myslím že ani tam nebyly všechny případy na které narážím. Autor se tam zmiňoval o dopředné deklaraci (Forward declaration), ale tu se mi ještě nikdy nepovedlo použít. Vždycky mě překladač nahlásí, že je to neúplná deklarace a chce hlavičkový soubor.
Nemáte někdo tip, kde bych našel detailní vysvětlení a ideálně ukázky řešení takových případů? Díky.
No v tom mám taky trošku binec. Někde se píše, že tam kde definuji globální proměnnou, tak dát extern int glob; a v ostatních souborech jen int glob; (např. teď Ty) a jinde zase naopak. V hlavním int glob; a v ostatních extern int glob (např. Pavel Herout).
Smysl by mě dávala spíš ta druhá varianta, ale zase třída extern určuje kam se proměnná uloží, ne? Takže by to IMHO mělo být použito jako první :/
Nicméně to, že to mám dát jen do mainu je pro mě novinka - ale smysl mě do docela dává. A kdybych to nechtěl v main.cpp, ale ve foo.cpp a bar.cpp jo, tak bych to nedal do main, ale musel bych to dát do obou souborů? A pokud jo, šlo by to dát místo těch dvou cpp souborů do foo.h a bar.h nebo to musí být v těch .cpp souborech?
Každopádně díky :)
Zdravím, v C/C++ jsem začátečník a potřeboval bych pomoct s pochopením globálních proměnných. Na netu je hromada příkladů a z nich mi přijde že to chápu, ale ve svém programu vidím, že nechápu :)
Zjednodušený příklad:
Mám jeden hlavičkový soubor (např. main.h) a pak soubor main.cpp, foo.cpp (k němu foo.h) a bar.cpp (k němu bar.h). Chci mít globální proměnnou glob, která bude přístupná ve všech třech .cpp souborech.
Hlavičkový soubor main.h includuji do všech .cpp souborů (ať už přímo nebo nepřímo). Takže právě sem bych umístil hlavní deklaraci:
int glob;
Pak chci třeba v main.cpp ve funkci main() přiřadit hodnotu:
#include "main.h"
extern int glob;
void main() {
glob = 21;
...
// Pouzivani trid foo() a bar()
...
return 0;
}
Už tady je problém - v takovémto případě mi to vyhodí třeba 5x multiple definition of glob.
A ve třídách foo() a bar() chci k proměnné taky přistupovat. Zkoušel jsem dávat:
extern int glob;
jak do hlavičkových souborů foo.h a bar.h, tak do foo.cpp a bar.cpp NAD definice tříd foo() a bar().
Zkoušel jsem toho moc, ale i když se mi to nějak podařilo, tak mi to nedávalo smysl => potřebuji pochopit jak to funguje / jak to správně deklarovat, inicializovat a používat.
Nějaký dobrák co by mě to trošku vysvětlil? Na netu v příkladech většinou ukazují sdílení proměnné z jednoho souboru do druhého a to není úplně ono. Já potřebuji jednu globální definici a používat tu proměnnou v libovolném počtu souborů. V jedno jí třeba nastavím hodnotu a ostatní ji jen čtou - nebo třeba i mění - to už je jedno.
Je tam :)
printf("%i/%i\n", isnan(0.0), isnan(0.0 / 0.0));
vrací 0/1. Díky!
#7 vitamin
Kladnou a zápornou nulu bych vracel norm +0.0 a -0.0 ? A to nekonečno vych vracel jak?
A pokud nych vracel NaN pomocí (0.0 / 0.0), tak jak bych pak výsledek funkce testoval?
double vysledek = deleni(3, 0);
if (vysledek == (0.0 / 0.0))
Nebo by to šlo i nějak líp? Třeba něco jako má JavaScript (isNaN())?
Jasný, už v tom mám jasno. Díky moc :)
Aha, tak to je fakt jen pro Windows (windows.h), ale narazil jsem na "errno" a u toho si uvědomuji, že jsem to někde četl. Takže to by mohlo být přenositelnější řešení.
Přesto bude asi předání výsledku nebo chyby pointerem vhodnější.
Jsem C/C++ začátečník. Přečetl jsem už dost výukových textů, ale narazil jsem na problém, který nevím jak EFEKTIVNĚ řešit. Je to druh problému, který se většinou ve výukových textech neřeší. Ke studiu z cizích zdrojových textů jsem se zatím nedostal.
Jde o to, jak v C vracet případnou chybu, která nastala v mé funkci. Mějme např. funkci:
double deleni(const double delenec, const double delitel) {
return delenec / delitel;
}
Co když funkci předám jako dělitele nulu? Je mi jasný, že před samotným výpočtem musím dělitel zkontrolovat. Pokud bude nula, tak co? Funkce musí vracet double (takže vrátit třeba string nemůžu) a printnout to na standardní výstup nechci (nechci tím třeba prudit uživatele, když to není jeho chyba). Vrátit 0.0 nemůžu, protože to je normální výsledek (jako např. pro 0 / 1). Výjimky v C nejsou, takže tu vyhodit taky nemůžu. Jak se tento problém v C nejběžněji řeší?
Mě napadlo jen vytvořit globální proměnnou (třeba strukturu) a v případě chyby tam info o chybě zapsat. Ale zase mě přijde blbý něco typu:
clear_myerror();
double vysledek = deleni(100, 0);
if (myerror.errno > 0) {
// neco
}
// pokracovani v pripade uspechu
Toto je jen příklad - stejně tak můžu mít funkci na nějaké třídění dat (ale nemám data) nebo cokoli jiného.
Tak to:
(?P<jmeno>vyraz)
je přesně to co jsem hledal. Díky moc Flowy za kopanec :)
2peter: jn, tomu jsem se chtěl právě vyhnout ;)
OK, díky za rady a tento thread považuji za vyřešen! :)
V reálu ale nehledám takto jednoduchá slova, ale složitější výrazy, takže ty regexpy tam mít bohužel musím. A kdyby jich bylo třeba 200, tak než to iterovat, tak mi přijde lepší použít jeden dlouhý regexp.
Jojo, (?: a (?# a další šméčka znám, ale to co jsem potřeboval jsem nenašel.
Ale teď koukám a testuju, že toto:
(?P<jmeno>ahoj)
je asi to co hledám. Pomohlo mi to slovo "pojmenovaná" (EN: named) a pak už jsem to našel. To jsem neznal - vyzkouším to a dám vědět. Zatím díky :)
Jak to myslíš? O to, co popisuju :)
Nejde mi o to jak vyřešit můj případ - mohl bych to předelat a víc oddělených výrazů a měl bych po starostech, ale pak by byla doba běhu scriptu delší. Chci zachovat tento způsob (tedy pospojování více regexpů do jednoho a plošně ho použít na text), ale mít možnost zjistit jaká část regexpu našla které slovo.
Zdravím, mám dlouhý regex a ten se dělí na více částí a po porovnání s textem potřebuji vědět která část výrazu se s textem shoduje.
Příklad:
<?php
$text = 'Ahoj svete! No nic, ja jdu, tak nazdar!';
$regex = '/(?:ahoj|cau|nazdar)/i';
preg_match_all($regex, $text, $matches);
print_r($matches);
?>
Vrací:
Array
(
[0] => Array
(
[0] => Ahoj
[1] => nazdar
)
)
Ale já potřebuji, abych měl ve výsledcích nějakou identifikaci té části výrazu, se kterým se ten který výsledek shoduje. Tzn. třeba něco jako:
$text = 'Ahoj svete! No nic, ja jdu, tak nazdar!';
$regex = '/(?:(?#454)ahoj|(?#455)cau|(?#456)nazdar)/i';
preg_match_all($regex, $text, $matches);
print_r($matches);
aby vrátilo:
Array
(
[0] => Array
(
[0] => Array
(
[0] => Ahoj
[1] => 454
)
[0] => Array
(
[0] => nazdar
[1] => 456
)
)
)
... nebo tak něco :D Nenapadá vás nějaké řešení?
Podle toho co jsem dohledal a přečetl potvrzuji, že se nejčastěji používá UDP. Nicméně i za zmínku o multicastu děkuji. Taky jsem si o tom něco přečetl.
O tom UDP už se mi povedlo najít nějaké info i ukázky, takže tento thread by se dal považovat za ukončený a všem děkuji za odpovědi :)
Fíha - na takovou kavinku to zní docela složitě :)
OK, rozdíl mezi TCP a UDP který jsi popisoval znám (i když neznám řešení problému s pořadm packetů, ale to už si dohledám).
Takže Tebou popisovaný postup se používá třeba i v Counter Strike atp? A nejdou ta UTP data moc jednoduše odchytávat? Pokud bych například posílal i data o přihlášeném hráči, tak aby se nedala vykrádat. Ale tak to už by se dalo zašifrovat (ale zas na to by byl potřeba další čas na dešifrování).
Ještě zkusím jeden dotaz. Nenapadá Tě místo, kdy bych viděl třeba v C++ naznačeno, jak by to mělo fungovat?
Každopádně díky za odpověď - docela mi to pomohlo pochopit jak to vlastně funguje. Ale nechcu vidět ty packety ve vymakanejších hrách, kde se stříli hejbe, skáče, jsou tam emoce, výbuchy, helikoptéry atp. To musí mít jeden paket půl giga :)
Ještě k těm projektilům. Posílat pozici projektilu by bylo asi moc náročný řešení. Tam by bylo asi lepší poslat jen čas výstřelu, rychlost a směr a ta animace letu by se už dopočítala na jednodlivých klientech nebo kecám?
Zdravím všechny,
jsem programátor a trpím neustálým přemýšlením nat tím, jak vyřešit různé úkoly v programování :D
K programování her jsem ještě nepřičuchl, ale poslední dobou mi pořád v hlavě šrotuje problém, který nevím jak se obyčejně řeší a to je komunikace v multiplayerových hrách.
Příklad: Mám plochu (hřiště) na kterou se mohou připojit hráči. Pro ilustraci mějme takovýto náhled:
Připojen obrázek.Modré trojúhelníky jsou lidé připojení na "server" (hřiště). Červené tečky jsou obličeje - tzn. směr pohledu. Pokud bych tedy chtěl udělat takovéto hřiště, po kterém by lidé mohli chodit, točit se a narážet do sebe (nebo třeba i "střílet"), jak by měla probíhat komunikace tak, abych zbytečně nezatěžoval server a všicni hned viděli co dělají ostatní? Jaký komunikační protokol se k tomu využívá?
Můžete mi to někdo kdo tomu rozumíte zkusit vysvwtlit? Třeba když jeden člověk popojde a otočí se. Jaké informace se jakým způsobem přenášejí na server a ze serveru k ostatním klientům?
Díky :)
Nazdar lidi. Mám nějaký binární soubor s příponou "p" a je to něco jako archiv více (asi pěti) binárních souborů - to vím jistě. Nevěděl jsem jak soubor otevřít a dočetl jsem se, že to asi bude zapiklený python soubor.
Chci se tedy zeptat - je možné, že můj "p" soubor je zapiklený "archiv" pěti binárních souborů? Pokud ano, mohl bych poprosit nějakou dobrou duši o napsání kódu kterým bych soubory rozbalil? Python neumím a ač jsem hledal na více místech a viděl i příklady kódů - vždycky tam byla nějaká nejasnost :/