L'utilisation de VLA qui n'est pas autorisé en C++. Ce qui veut dire que ton compilateur n'est pas bien configuré. char buf[size] est une VLA lorsque size n'est pas une valeur connue à la compilation. C'est d'ailleurs une bonne raison de ne pas utiliser les tableaux C et de préférer std::array.
Une allocation de la taille du fichier. Que va-t-il se passer avec des fichiers de 20Go si tu n'as que 16Go disponibles ? En plus, les VLAs ont un fonctionnement particulier et c'est bien possible que le code fasse n'importe quoi dans ce cas.
Ensuite, il y a un problème dans la logique du code: ostream::write et istream::read lisent/écrivent tous les caractères demandés à moins de tombé sur un eof. Il n'y a aucune raison de faire une boucle.
Les appels a close() sont également superflus.
Et pour finir, selon le système et les options de compilation, les seek et compagnie ne dépassent pas 4Go. Donc pour faire simple, n'utilise pas seek et compagnie et passe par des std::streambuf/std::filebuf avec une lecture et une écriture par paquet.
Avec un peu de chance, le compilateur que tu emploie le supporte déjà, et il se peut même que ce soit la norme qu'il utilise par défaut.
La bonne question et donc "quel compilateur utilises-tu"?
Si tu utilise Gcc, tu peux accéder à la norme C++17 dés la version 6 (support partiel) ou la version 7 (support plein), et tu peux même disposer de certains éléments qui ne seront finalisés qu'en C++20 à partir des version 8 et 9 de Gcc. Selon la version de Gcc, l'ajout de l'option -std=c++17 à la ligne de commande sera (peut-être) nécessaire pour en profiter
Si tu utilise VisualStudio (version 2017 ou ultérieur), tu pourras disposer de la norme C++17 en ajoutant l'option /std:c++17 (voire -std:c++17) aux options de ton projets
Si tu utilise une version plus ancienne de Gcc (4.x, 5.x ou antérieure ) ou de visual studion (Vs 2015, ou antérieure), je serais déjà étonné de savoir où tu les as trouvés (si tu viens de les télécharger) ou si tu as envisagé de te mettre au développement "à l'époque", et que tu es passé à autre chose" (par manque de temps surement ). Mais le conseil serait alors de ... te dépêcher de le mettre à jour.
Si tu veux télécharger une version récente de l'un ou de l'autre compilateur, cela se passe
==>ici<== pour visual studio (la version "comunity" est gratuite )
Si tu dispose de code::blocks qui aurait été installé avec un compilateur trop ancien, tu peux utiliser ==>cette discussion<== pour savoir comment mettre le compilateur à jour
Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
Merci beaucoups pour tes eclaircissements, mais je travaille avec QtCreator et j'utilise MinGW comme compilateur, je suis a la versions 5.9.0 et et la version 4.3.01 de QtCreator.
1- Qt Creator n'est qu'un EDI (Environnement de Développement Intégré): un programme qui regroupe les outils nécessaires au développement tels que
la suite de compilation (préprocesseur, compilateur, éditeur de liens, générateur d'archives pour les bibliothèques)
un éditeur de texte avec des fonctions sympa de coloration syntaxique, de mise en page, et de recherche
un débuggeur
un système de configuration et de gestion de projets
2- Comme tous les outils, il faut penser à les mettre à jour de temps en temps, et c'est d'autant plus vrai pour la bibliothèque Qt qui évolue en permanence énormément.
A l'heure actuelle, tu utilises un compilateur, un EDI et une version de Qt sans doute vieux de trois ans, ce qui est bien dommage. N'hésite pas à mettre tes outils à jour, en installant la dernière version en date qui permet désormais de créer des applications 64 bits sous windows (Qt 5.13, Gcc 7.3.0, QtCreator 4.9.2), ta vie n'en sera que meilleure.
3- Sauf erreur, avec Gcc 5.9.x, tu devrais au minimum pouvoir disposer de la norme C++14 , même si, cette version de Gcc supporte par défaut C++98 : il "suffit" d'ajouter l'option "qui va bien" à la ligne de commande.
Si tu utilises qmake (un fichier .pro) pour décrire ton projet, il te suffit d'ajouter l'option CONFIG += c++14
Si tu utilises déjà cmake pour décrire ton projet, il "suffit d'ajouter les lignes
dans le fichier de fichier de configuration général
Tu peux essayer d'activer C++17 en remplacant la valeur 14 par 17 : dans le pire des cas, si le compilateur ne supporte pas cette norme, tu obtiendra un message d'erreur explicite
Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
Merci beuacoup pour tout ces informations, justement j'ai profié de mon dimanche pour télécharger la derniere version de Qt version 5.13.0 ainsi que QtCreator 4.9.0, je vais les installés et je te diendrai au courant.
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World!" << endl;
unique_ptr<int> ptr1;
return 0;
}
et enfin voici les erreurs :
D:\Fichiers_applications\C++\Projets_QtCreator\Revision_c_plus_plus 07-06-2019\Pointeur_inteligents\main.cpp:11: erreur : 'unique_ptr' was not declared in this scope
unique_ptr<int> ptr1;
^~~~~~~~~~
Attention, sauf erreur de ma part, il est possible d'obtenir Qt 5.13 sous des formes prévues pour fonctionner avec différentes version de Gcc.
Et, bien sur, on peut donc obtenir différentes version de Gcc au travers de l'installateur de Qt.
As tu bien veillé à prendre la version la plus récente possible de Gcc lors de l'installation ?
en ouvrant une invite de commande et en y lancant l'instruction
gcc -v
la dernière ligne renvoyée par cette commande devrait ressembler à
gcc version x.y.z (blablah)
Quelles sont les valeurs de x, y et z que tu obtiens : est-ce 5.3.0 ou 7.3.0? Si c'est 5.3.0, c'est que tu t'es trompé en choisissant le compilateur
Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
Tu as donc bien la version 7.3.0 de Gcc... Et, après lecture plus attentive de l'erreur indiquée, c'est effectivement parce que, pour pouvoir utiliser la classe std::unique_ptr, il faut d'abord inclure le fichier <memory> à ton programme (#include <memory>). Autrement, le compilateur ne saura même pas que cette classe existe, ce qui provoque ton message d'erreur
Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
oui c'est vrai jo_link_noir, le problème venait du include<memory>
même sans rajouter CONFIG += C++17 ou C++14 ça marche, merci à tous
Problème avec un fichier binaire.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
git is great because Linus did it, mercurial is better because he didn't.