» »

[C++11] Qt 5.3

[C++11] Qt 5.3

killa bee ::

Zanima me če Qt 5.3 podpira c++11? Sam nisem našel te informacije?
  • spremenil: Mavrik ()

technolog ::

C++11 je sorce compatible za nazaj.

In ne samo to, da podpira, še dost lepšo in krajšo kodo lahko pišeš.

Zgodovina sprememb…

killa bee ::

Kje pa to piše da podpira?

kaj pa ta novi Eclipse Luna a podpira c++11 ?

Zgodovina sprememb…

  • spremenilo: killa bee ()

AndrejO ::

technolog je izjavil:

C++11 je sorce compatible za nazaj.

Ne, ni. En sam napačen #define, pa boš dobil kodo, ki se v C++11 bodisi sploh več ne prevede, ali pa se prevede v nekaj napačnega.

killa bee je izjavil:

Kje pa to piše da podpira?

Nikjer izrecno. Lahko pa to impliciraš iz dejstva, da že sam SDK od prevajalnika zahteva podporo C++11 standardu.

Skratka, tvoje skrbi so odvečne.

Kar tako malo za okus: http://www.artandlogic.com/blog/2013/09...

killa bee ::

Kakšno kodo bi moral recimo vpisati v Eclipse da bi videl če res podpira c++11?

Zgodovina sprememb…

  • spremenilo: killa bee ()

technolog ::

AndrejO je izjavil:

technolog je izjavil:

C++11 je sorce compatible za nazaj.

Ne, ni. En sam napačen #define, pa boš dobil kodo, ki se v C++11 bodisi sploh več ne prevede, ali pa se prevede v nekaj napačnega.



C++11 je source compatible za nazaj, razen parih fines.

https://stackoverflow.com/questions/639...

Zgodovina sprememb…

AndrejO ::

killa bee je izjavil:

Kakšno kodo bi moral recimo vpisati v Eclipse da bi videl če res podpira c++11?

Na povezavi, ki sem ti jo dal, že imaš en takšen primer.

technolog je izjavil:

AndrejO je izjavil:

technolog je izjavil:

C++11 je sorce compatible za nazaj.

Ne, ni. En sam napačen #define, pa boš dobil kodo, ki se v C++11 bodisi sploh več ne prevede, ali pa se prevede v nekaj napačnega.


C++11 je source compatible za nazaj, razen parih fines.

https://stackoverflow.com/questions/639...

Kompatibilen pomeni kompatibilen. To ne pomeni "skoraj kompatibilen", "kombatibilen, ampak ..." in tudi ne "kompatibilen, razen ...".

C++11 ni nazaj kompatibilen s predhodnimi verzijami standarda, marsikatera koda, ki je prej delovala b.p. se z C++11 niti ne prevede. Zato ne razpredaj o kompatibilnosti, ki to ni, in, ki je tudi ni nihče oglaševal. Lani sem nemalo časa zabil ravno s popravljanjem kode, da sem jo lahko nato prevajal s C++11.

Finese... Če ti dam obvezno avtomobilistično metaforo, je po tvoje vozilo z dvema kolesoma "avto, razen parih fines".

Zgodovina sprememb…

  • spremenil: AndrejO ()

killa bee ::

Na povezavi, ki sem ti jo dal, že imaš en takšen primer.


Obstaja kak bolj preprost primer? (3,4,5 vrstic )

AndrejO ::

killa bee je izjavil:

Na povezavi, ki sem ti jo dal, že imaš en takšen primer.


Obstaja kak bolj preprost primer? (3,4,5 vrstic )

Recimo uporaba besede "auto" (9. vrstica) in razširjene inicializacije (7. vrstica).
#include <iostream>
#include <list>

using namespace std;

void main(void) {
  list<int> a({1, 4, 6, 3, 6});

  for (auto it = a.begin(); it != a.end(); ++it) {
    cout << "Stevilka: " << *it << endl;
  }
}


Me zanima kako bo technolog pojasnil njegovo domnevno "kompatibilnost", glede na to, da je "auto" v c++03 pomenil nekaj čisto drugega.

killa bee ::

kaj pa pomen "auto"?

technolog ::

Zgrešu si point. V primeru, da kak delček Qt frameworka ni bil kompatibilen s C++11, so to že 3 leta nazaj pofixal.

@killa_bee: Najprej se C++11 nauči :)

Zgodovina sprememb…

AndrejO ::

killa bee je izjavil:

kaj pa pomen "auto"?

"auto" je nadomestek za izrecno navedbo tipa podatka. Prevajalnik lahko sam ugotovi kakšnega tipa mora biti spremenljivka, zaradi česar lahko programerju prihrani tipkanje in kodo v nekaterih primerih naredi za bolj berljivo.

Če tega ne bi imel, potem bi moral isti košček kode zapisati kot:
  for (list<int>::iterator it = a.begin(); it != a.end(); ++it) {
    cout << "Stevilka: " << *it << endl;
  }


Namesto "auto" imaš tako "list<int>::iterator".

technolog je izjavil:

Zgrešu si point. V primeru, da kak delček Qt frameworka ni bil kompatibilen s C++11, so to že 3 leta nazaj pofixal.

To ni ekvivalentno "C++11 je sorce compatible nazaj", kar si navedel kot prvi razlog za svoje sklepanje. Je pa lepo, da si z drugimi besedami povzel moj odgovor. Vedno cenim kompliment. ;)

technolog je izjavil:

@killa_bee: Najprej se C++11 nauči :)

Po očitnih začetnikih je vedno najlažje udrihati. Boš morda prijavil še kakšno cvetko o "kompatibilnosti"? Si želiš praktičen primer nekompatibilne kode iz 2003? Bi morda sam najprej prebral standard, preden nekaj na pamet zapišeš?

technolog ::

Ne, je pa osnova za sklep. Da je večina, kar je napisano v C++ od prej, kompatibilno, ali pa se da narest kompatibilno brez nekega groznega efforta. Sledi: Prekleto logično je, da Qt, sploh Qt5 dela z C++11.

Seveda se pa strinjam da je source compatiblity strogo gledano 0/1.

Auto je ta prva stvar, ki jo o C++11 izveš. To pomeni, da si ni še nič pogledal in je bil to zgolj dobronameren nasvet.

Zgodovina sprememb…

AndrejO ::

technolog je izjavil:

Ne, je pa osnova za sklep.

Če sklepaš na podlagi napačnih podatkov, potem je rezultat lahko zgolj slučajno pravilen, sklep kot takšen pa ničvreden.

technolog je izjavil:

Da je večina, kar je napisano v C++ od prej, kompatibilno, ali pa se da narest kompatibilno brez nekega groznega efforta.

Sploh, kadar to namesto tebe počno drugi. Še posebej pa, ko ti program sicer deluje, ne pa vedno. Npr. nepravilno pisanje v pomnilnik (memory corruption, glede na to, da tu tudi slovenščina dela težave), ki se pojavi zgolj zato, ker prevajalnik za C++11 naredi nekaj drugega, kot pa prevajalnik za C++ 2003.

Imam te na sumu, da v življenju nisi nikoli reševal tovrstne težave in znova govoriš nekaj na pamet.

technolog je izjavil:

Seveda se pa strinjam da je source compatiblity strogo gledano 0/1.

Ali pa tudi kakorkoli drugače gledano. Po tvoje je M6 matica tudi kompatibilna z M5 matico. Saj izgleda praktično enako, mar ne?

technolog je izjavil:

Auto je ta prva stvar, ki jo o C++11 izveš. To pomeni, da si ni še nič pogledal in je bil to zgolj dobronameren nasvet.

Namesto nasveta bi mu lahko tudi odgovoril na vprašanje. Bi ti to vzelo preveč časa?

killa bee ::

A bi bil ta program tudi v redu?
#include <iostream>
#include <typeinfo>
using namespace std;

int func() {
    return 42;
}

int main ( int argc, char ** argv ) {
    auto x = func();
    cout << x << endl;
    cout << typeid(x).name() << endl; 
    return 0; 
}

Zgodovina sprememb…

  • spremenilo: killa bee ()

AndrejO ::

Da, tudi ta program bo za prevajanje potreboval c++11, ker v 10. vrstici uporablja automatično določitev tipa spremenljivke. Sicer je to primer, kjer imaš minimalno vrednost avtomatičnega določanja tipa spremenljivke, je pa koda vsekakor pravilna.

Ravno tako si tudi pravilno uporabil "#include <typeinfo>", ki ga zahteva funkcija typeid().

Tako imaš sedaj program, ki ga lahko prevedeš samo s c++11, sedaj pa moraš dodati še nekaj iz Qt knjižnice, da boš izpolnil cilj, ki si si ga (posredno) zastavil v prvem vprašanju: uporaba Qt 5.3 v programu, ki ga prevajaš s c++11.

killa bee ::

kaj pa je treba še dodati?

AndrejO ::

Kaj bi želel narediti?

killa bee ::

Pognati moj zgornji program v Qt 5.3. Ko ga poženem mi javi kup enih napak??

Zgodovina sprememb…

  • spremenilo: killa bee ()

arjan_t ::

mogoce mesas Qt in QtCreator?

killa bee ::

ja jst zaženem Qt creator.

AndrejO ::

killa bee je izjavil:

Pognati moj zgornji program v Qt 5.3. Ko ga poženem mi javi kup enih napak??

Ali je ena izmed njih morda
'auto' changes meaning in C++11; please remove it [-Wc++0x-compat]



Če je, potem odpri .pro datoteko in v njo dopiši
CONFIG += c++11


Tako boš v projektu uporabil C++11 namesto C++ 2003.


Če uporabljaš Eclipse, potem imaš desni klik na projektu, Properties -> C/C++ Build -> Settings -> Tool Settings -> GCC C++ Compiler -> Dialect -> Language Standard. Izbereš ISO C++11.

killa bee ::

Ja tudi ta.

A je možno spremenit nastavitve v Qt 5.3 Creator brez da bi odprl kakršnokoli datoteko. Sepravi tako kot v Eclipsu.

killa bee ::

Kaj pa če bi v Qt 5.3 Creator samo zamenjal compiler?

AndrejO ::

killa bee je izjavil:

A je možno spremenit nastavitve v Qt 5.3 Creator brez da bi odprl kakršnokoli datoteko. Sepravi tako kot v Eclipsu.

Samo tako, da "pokvariš" nastavitve skoraj celotnega okolja in otežiš deljenje kode z ostalimi razvijalci. Najboljši način je ta, ki sem ga opisal. Ostale možnosti močno odsvetujem, tudi če bi v tvojem primeru delovale, ker se boš tako navzel slabih navad za naprej.

killa bee je izjavil:

Kaj pa če bi v Qt 5.3 Creator samo zamenjal compiler?

Zgolj zamenjava prevajalnika verjetno ne bo zadoščala. Če delaš v Linux, potem imaš GCC in CLang, ki pa oba privzeto uporabljata C++ 2003. Kar bi moral storiti je, da kloniraš tega, ki ga uporabljaš trenutno in dopišeš ustrezno zastavico pri "Platform codegen flags" in "Platform linker flags". Če delaš v Windows, pa se moje izkušnje končajo.

Še enkrat pa ti takšen pristop močno odsvetujem. Nastavitve okolja prizadanejo vse projekte in najbolje je, da se sprijazniš s tem, da imaš .pro datoteko z nastavitvami, ki jo urejaš s tipkovnico namesto z miško.

Lahko tudi nehaš pisati Qt 5.3 creator, ker je verzija, ki jo uporabljaš 3.1 ali 3.2. 5.3 je verzija Qt knjižnic, ne pa samega programa. Na začetku je to povzročilo nekaj zmede. "Qtcreator" bo zadoščalo.

killa bee ::

Qtcreator mi izvede program tudi če ne vpišem spodnje kode ??
CONFIG += c++11

Zgodovina sprememb…

  • spremenilo: killa bee ()

AndrejO ::

clean/qmake?

Po spremembi nastavitev moraš aplikacijo ponovno prevesti.

killa bee ::

Zakaj mi pa noče zdaj pognat ta program v Eclipsu?

[IMG]http://i62.tinypic.com/29y5i0o.png[/IMG]

Zakaj bi karkoli dodajal saj mi dela brez da karkoli vnašam.

Zgodovina sprememb…

  • spremenilo: killa bee ()

AndrejO ::

Iz slike ne morem uganiti kakšne so nastavitve projekta v Eclipse. Na prvi pogled bi posumil, da prevajalnik ni pravilno nastavljen (pogrešam imenika "Binaries" in "Includes").

Moje znanje o uporabi teh orodij v Windows je omejeno, tako da ti tudi ne vem pomagati okoli tega kako deluje prevajalnik s qtcreator-jem v Windows niti katerega qtcreator v Windows sploh uporablja.

killa bee ::

Kako pa v Eclipsu sploh narediš nov projekt v katerega pišeš c++ kodo? Zgleda da sm jst ta prvi korak narobe naredil.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
!

[C++] Povezave

Oddelek: Programiranje
4260798 (159) DamijanD
»

[c++] auto

Oddelek: Programiranje
6766 (608) killa bee
»

[C++] Programiranje razvojnega okolja za Linux - Ideje (strani: 1 2 )

Oddelek: Programiranje
609096 (7033) smoke
»

dx11 na xp

Oddelek: Igre
233587 (3227) amigo_no1
»

Sprejet standard C++11

Oddelek: Novice / Ostala programska oprema
4011353 (9435) Bistri007

Več podobnih tem