270

Je pense aussi qu'il vaut mieux commencer par les API standard, avant de rentrer dans d'énormes librairies prêtes à l'emploi comme Qt oui
Ca permet de mieux distinguer les concepts, et +1 ./266 et ./267.
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

271

En même temps, en ce qui concerne les conteneurs, l’API de Qt est quasiment identique à celle de la stdlib C++. Quoique, je ne sais plus comment ça a évolué mais il me semble qu’il y avait différentes saveurs d’API, genre une plus proche de l’esprit du Java, une autre plus proche du C++…

Vous savez pourquoi Nokia a abandonné Jambi ?
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

272

http://qt.nokia.com/products/programming-language-support

Qt Jambi – Qt bindings to the Java programming language – has been discontinued in order to focus resources on the Qt cross platform application and UI framework. Qt Jambi will be maintained by us until May 2010, and is available for download under the LGPL v2.1 license at http://qt.nokia.com/downloads

273

Ouais, mais c’est bizarre. Ils veulent utiliser Qt sur les téléphones mobiles, et le Java est pas mal disponible sur ces machines…
Ça veut dire qu’ils préfèrent rester sur du C++. C’est con, pour une fois qu’on avait accès à une bonne API dans un bon langage…
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

274

Sauf que les jvm JavaME des téléphones sont faite pour fonctionner en sandbox et donc ne permettent pas les bibliothèque natives. De plus Qt Jambi est fait pour JavaSE, par pour JavaME

Je n'ai jamais vraiment cru à l'avenir de Qt Jambi. Autant avoir un bon environnement complet standardisé et multi-plateforme correspond vraiment a un besoin en C++, autant en Java 95% de ce que fournit Jambi est déjà dispo dans l'API standard.
avatar

275

squalyl (./221) :
static dans l'implémentation => sémantique C et fonction visible dans le fichier uniquement
static dans la classe: =>sémantique objet java toussa membre de classe et pas d'instance. fail.


ah oué j'avais jamais tilté grin
bon, mais c'est vilain quand même couic

276

ça s'appelle le cul entre 2 chaises ^^

sinon l'aurait fallu ajouter un switch --static-c++ et remplacer le mot clé static du C par autre chose (local?) ou bien remplacer le static du c++ (qui existe déja dans... hmmm... à peu près tous les autres langages?) par autre chose (nonvirtual? notinstance? classlocal?)

grin

277

ou plus simplement, oublier d'inventer le c++ trioui

278

Oui, il aurait pu inventer le ++c à la place. embarrassed
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

279

Ce qui aurait pu donner le C++ ++--, un bien meilleur langage hehe
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

280

Uther (./274) :
Sauf que les jvm JavaME des téléphones sont faite pour fonctionner en sandbox et donc ne permettent pas les bibliothèque natives. De plus Qt Jambi est fait pour JavaSE, par pour JavaME
Oui, enfin ils auraient pu partir de ce qui a été fait pour tourner sur JavaME.
Je n'ai jamais vraiment cru à l'avenir de Qt Jambi. Autant avoir un bon environnement complet standardisé et multi-plateforme correspond vraiment a un besoin en C++, autant en Java 95% de ce que fournit Jambi est déjà dispo dans l'API standard.
Tout à fait, en termes de services. Sauf que Swing est très désagréable. Bref, une JVM minimale faisant juste tourner Qt peut répondre à pas mal de demandes et permet de construire des applications intéressantes et performantes, dans un langage agréable.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

281

Sasume (./280) :
Oui, enfin ils auraient pu partir de ce qui a été fait pour tourner sur JavaME.
J2ME est quand même amputé de pas mal de chose que doit utiliser Jambi, notamment la réflexion. En tout cas ca n'aurait pas aidé pour les mobile vu qu'aucun ne supporte le code natif.
Sasume (./280) :
Tout à fait, en termes de services. Sauf que Swing est très désagréable. Bref, une JVM minimale faisant juste tourner Qt peut répondre à pas mal de demandes et permet de construire des applications intéressantes et performantes, dans un langage agréable.
Personnellement, je n'ai aucun problème avec Swing. D'ailleurs Qt a un principe de fonctionnement très proche La seule grosse différence est l'utilisation des slot/signal plutôt que les listeners, et je ne trouve pas que se soit un avantage.
avatar

282

squalyl (./269) :
par exemple si tu es obligé d'utiliser gecko de Mozilla tu auras pas peur entre les nsIString nsICString nsIArray nsISupportsArray nsIMutableArray, etc tritop (quelle daube)

Justement, si tu as besoin d'un navigateur web dans une application KDE, tu n'utiliseras pas cette horreur, mais KHTML ou QtWebKit. tongue
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

283

C'est pas forcément un problème d'utiliser un toolkit non standard pour apprendre. Perso le C j'ai fait d'abord en console (il faut bien maîtriser la base du langage quand même hein) et ensuite avec Win32. Sans parler de TIGCC.
Au final même si je ne coderais plus avec Win32 aujourd'hui je ne trouve pas que ça ait été une mauvaise expérience. C'est une API comme une autre, et très puissante étant donné mon système d'exploitation.
Bon Qt c'est vraiment lourd comme truc, ça te change vraiment la perception du C++ (à regarder les samples tu n'as plus l'impression que c'est le même langage). Donc à voir, une fois que tu maîtrises la base du C++ et si de toute façon tu es sous KDE, ce n'est pas forcément un mauvais choix hehe
(mais ton bouquin ne t'aidera pas, donc il faut le finir avant ^^)
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

284

Brunni (./283) :
ça te change vraiment la perception du C++ (à regarder les samples tu n'as plus l'impression que c'est le même langage)

Effectivement, d'où l'intérêt d'apprendre tout de suite avec. smile
Donc à voir, une fois que tu maîtrises la base du C++

Sauf que c'est beaucoup plus simple de programmer avec Qt que sans et que donc si on veut s'en sortir dans les 2 cas, il vaut mieux commencer avec Qt et apprendre le reste du C++ au fur et à mesure que l'inverse.

Il y a plein de pièges dans "la base du C++". Par exemple, prenons ce code tout bête, qu'on peut trouver dans pas mal de tutoriaux C++ à peu de choses près:
#include <iostream.h>
int main()
{
  cout << "Hello World!" << endl;
  return 0;
}

Et bah, ce code ne compilera pas avec un g++ à jour, il y a au moins 2 choses à modifier pour que ce code soit conforme au standard et compilable avec un g++ récent, je vous laisse les trouver. tongue
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

285

Oué et c'est tout à fait naturel si tu suis la logique du C++. S'ils ont choisi de faire un namespace pour la librairie standard, c'est peut être discutable (ça a des avantages) mais c'est normal que ça ne compile pas si tu l'omets.
Ensuite le .h n'a rien à faire là, si tu lui files un nom de fichier qui n'existe pas, c'est normal qu'il ne le trouve pas.
Bref je vois pas où tu veux en venir.
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

286

Déjà il te manque le namespace std devant les objets cout et endl. Mais ça je pense que même le g++ d’aujourd’hui ne le laisse pas passer.
Sinon, je ne sais pas… Il faut préciser « main(void) » ?

[cross] : ah, c’est iostream, pas iostream.h ?
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

287

Non pas besoin de préciser le "void"
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

288

Kevin> c'est comme si tu oublies le Q_OBJECT (qui n'est pas logique, surtout là où il est placé), ça va te foutre la merde. Pareil pour le std, on te demande qu'il soit là, si un tuto l'omet c'est qu'il est mal foutu ^^
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

289

Kevin Kofler (./284) :
Brunni (./283) :
ça te change vraiment la perception du C++ (à regarder les samples tu n'as plus l'impression que c'est le même langage)

Effectivement, d'où l'intérêt d'apprendre tout de suite avec. smile.gif

Non ! Qt se greffe sur le langage C++, et je veux apprendre les choses dans le même ordre. Donc d'abord C++ (je compte faire quelques petits trucs en console, sans savoir quoi encore, on en reparlera j'aurai besoin de vous grin), puis aborder Qt. Je ne veux pas faire de l'objet par obligation, mais en faire parce que je trouverai ça nécessaire à la bonne conception de mon programme : donc d'abord apprendre à penser objet, ensuite utliser Qt pour réaliser des interfaces intéressantes et graphiques.

290

Brunni (./285) :
Oué et c'est tout à fait naturel si tu suis la logique du C++. S'ils ont choisi de faire un namespace pour la librairie standard, c'est peut être discutable (ça a des avantages) mais c'est normal que ça ne compile pas si tu l'omets.Ensuite le .h n'a rien à faire là, si tu lui files un nom de fichier qui n'existe pas, c'est normal qu'il ne le trouve pas.

Voilà, bravo, tu as trouvé les 2 problèmes. smile
Bref je vois pas où tu veux en venir.

Je veux en venir au fait qu'avant la standardisation du C++98, le header était appelé iostream.h et que ce nom se retrouve dans des centaines de tutoriaux, de plus le C++ pré-standard ne proposait pas non plus les namespaces, donc on trouve aussi plein de code exemple qui les oublie.

Un autre problème est que g++ acceptait ce code non-standard pendant longtemps, mais ne l'accepte plus maintenant.

Pour les namespaces, le problème était que la libstdc++ ne gérait pas les namespaces et que donc g++ les ignorait pour faire tourner le code standard. Quand la libstdc++ a été corrigée et ce hack supprimé de g++, ça a fait mal. Mais il y avait toujours un iostream.h de compatibilité qui faisait en gros l'équivalent de #include <iostream> et using namespace std; (mais seulement pour les symboles définies dans iostream), header de compatibilité qui a aussi été supprimé plus récemment.
Sasume (./286) :
Il faut préciser « main(void) » ?

Non. En C++, et contrairement au C, (void) et () sont strictement équivalents. Le C++ ne permet pas les déclarations K&R (où () veut dire "accepte n'importe quoi").
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

291

En C au pire tu as un warning si tu tape

int toto()
{

}

et au mieux rien. et ça correspond a un "int toto(void)"
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

292

Kevin Kofler (./290) :
Je veux en venir au fait qu'avant la standardisation du C++98, le header était appelé iostream.h et que ce nom se retrouve dans des centaines de tutoriaux, de plus le C++ pré-standard ne proposait pas non plus les namespaces, donc on trouve aussi plein de code exemple qui les oublie.

Un autre problème est que g++ acceptait ce code non-standard pendant longtemps, mais ne l'accepte plus maintenant.

C'et bien pour ça que j'ai choisi un bouquin édité en 2007 pour apprendre. happy

293

Sasume (./286) :
[cross] : ah, c’est iostream, pas iostream.h ?

Yep, et ce depuis au moins 1998 et dans toutes les versions officiellement standardisées du C++ (ISO C++98 étant la première, la prochaine étant en cours de standardisation). Merci d'illustrer exactement ce à quoi je voulais venir. smile
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

294

Godzil (./291) :
En C au pire tu as un warning si tu tape

int toto()
{

}
et au mieux rien. et ça correspond a un "int toto(void)"

Mais ça fait que toto(1,2,3); compilera sans broncher et jettera les arguments. sick De plus, pour les pointeurs de fonction, int (*)(void) et int (*)() ne sont pas le même type, ce qui entre en considération par exemple pour les histoires d'aliasing. Bref, en C, il faut toujours écrire le (void).
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

295

t'écris ngetchx(void) toi ?

296

Pas pour les appels, pour les déclarations! Et oui, le prototype de ngetchx dans TIGCCLIB porte le (void)!
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

297

Kevin Kofler (./282) :
squalyl (./269) :
par exemple si tu es obligé d'utiliser gecko de Mozilla tu auras pas peur entre les nsIString nsICString nsIArray nsISupportsArray nsIMutableArray, etc tritop (quelle daube)

Justement, si tu as besoin d'un navigateur web dans une application KDE, tu n'utiliseras pas cette horreur, mais KHTML ou QtWebKit. tongue

ça m'intéresse. Comment définit on en c++ de nouvelles classes accessibles au js des pages web dans webkit? l'équivalent de xpcom et activex?

298

Regarde ce que fait Plasma pour charger les widgets Dashboard de OS X, ils utilisent QtWebKit et il me semble bien qu'ils exportent des fonctions JS implémentées en C++ par dessus.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

299

(ayé j'ai les nighty-builds de CodeBlocks avec apt maintenant, c'est le pied smile)

300

Bon, je suis à peu près à la moitié de mon bouquin, et j'ai une question.
Dans le cadre d'une classe possédant un ou des espaces alloués par new, est-il bon d'avoir toujours ce que l'auteur appelle une classe canonique, c'est à dire avec au minimum constructeur + destructeur (ça ok c'est normal), mais aussi un constructeur de copie et un opérateur d'affectation ('=' surchargé) ? Ca me semblerait normal que ce soit toujours le cas, non ? Je me trompe ?
Ce serait de toute façon une sécurité en cas de création d'un objet temporaire (par exemple, dans le cas d'un passage par valeur) ?

ps -> dans le cas d'un passage par référence, est-ce que la fonction appelée travaille directement sur l'objet argument, ou sur une copie, copiée après dans l'objet initial ? On serait alors dans le cas d'utilisation du constructeur de copie.