Tableau qui ne marche pas c++

L’auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Salut, mon problème : j’exécute mon code de tableau (array) :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include "stdafx.h"
#include "iostream"

using namespace std;


int main() {

    int const nbrBestScore = 5;
    int bestScore[nbrBestScore];

    bestScore[0] = 118218;  
    bestScore[1] = 100432;  
    bestScore[2] = 87347;   
    bestScore[3] = 64523;   
    bestScore[4] = 31415;

    for (int i = 0; i < nbrBestScore; i++)
    {
        cout << bestScore[i] << endl;
    }




    return 0;
}

..Je pense que j’ai tous fais comme il faut mais il parait que 2 erreurs persistes :( Les codes d’erreurs : 1:

Severity Code Description Project File Line Suppression State Error LNK2005 main already defined in Array.obj LearnC++ C:\Users\AdminHP\source\repos\LearnC++\LearnC++\LearnC.obj 1

Erreur 2 : Severity Code Description Project File Line Suppression State Error LNK1169 one or more multiply defined symbols found LearnC++ C:\Users\AdminHP\source\repos\LearnC++\x64\Debug\LearnC++.exe 1

Si quelqu’un poux m’aider, merci :)

+0 -0
Auteur du sujet

Je compile le programme en appuyant sur f5 :) -Je suis sur visual stuio et stdafx.h est une spécificité de vs -Éviter d’utiliser quoi ? et pourquoi ?

Édité par PixarFilmz-

+0 -0

Cette réponse a aidé l’auteur du sujet

Ton problème est décrit ici main already defined in Array.obj

Ce qui veut dire qu’à la compilation, deux fonctions main sont trouvées. Du coup soit tu as 2 fonctions main, soit je te dirais de supprimer tous les .obj générés. Et de voir quels fichiers VS compilent. Dans tous les cas le code semble correct.

stdafx ne sert à rien dans ton code, si ça ne sert à rien, vire le. using namespace std; est déconseillé pour éviter d’avoir un même mot pouvant référer à deux choses différentes. Par exemple, endl de ton code veut dire std::endl, mais aussi ::endl.

+1 -0
Auteur du sujet

-Ah merci, le problème c’est que j’avais 2 fichiers .cpp dans le même projet :( -stdafx ne peux pas être enlevé car c’est indispensable pour que vs marche, un genre de #pragma once.. -J’ai enlevé le using name space.. en quoi ça peux crée des problèmes si je l’utilise ? Merci encore :)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include "stdafx.h"
#include "iostream"



int main() {

    int const nbrBestScore = 5;
    int bestScore[nbrBestScore];

    bestScore[0] = 118218;  
    bestScore[1] = 100432;  
    bestScore[2] = 87347;   
    bestScore[3] = 64523;   
    bestScore[4] = 31415;

    for (int i = 0; i < nbrBestScore; i++)
    {
        std::cout << bestScore[i] << std::endl;
    }





    return 0;
}
+0 -0

Le using namespace peut te créer des problèmes si tu inclus des fichiers avec le même nom de fonction. Comme tu ne précises pas l’origine de la fonction ex: std:: ou plop:: il y aura un conflit.

stdafx n’est utile que pour utiliser les librairies Windows. Si tu fais un truc cross-plateforme, tu n’en a pas besoin. C’est juste un point d’entrée vers les lib Windows déjà compilée (car les recompiler à chaque fois, c’est long).

+0 -0

Lu’!

Retire les double-quotes autour de iostream. Pour inclure des éléments de la bibliothèque standard (ou éventuellement de bibliothèques installées dans des répertoire "similaires" à ceux de la lib standard, c’est :

1
#include <iostream>

Notamment parce que l’implémentation susceptible d’utiliser cela pour ajouter de l’information à l’emplacement de l’include.

Note pour using namespace std.

Autre note : pour les tableaux de taille statiquement fixée en C++, il y a std::array depuis C++11 (std::make_array en C++17). Pour débuter, j’aurai tendance à conseiller d’utiliser toujours std::vector qui n’apporte pas plus de difficulté et qui est plus général.

Édité par Ksass`Peuk

First : Always RTFM - "Tout devrait être rendu aussi simple que possible, mais pas plus." A.Einstein [Tutoriel Frama-C WP]

+0 -0

Concernant ton problème de main(), je crois que sous Windows ton main doit s’appeler WINMAIN ou un truc du genre. Vérifie sur ce site et essaie.

Une version un peu plus "moderne" de ton programme (C++11/14) :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#include <array>
#include <iostream>

int main() {
    std::array<int, 5> bestScore = {118218, 100432, 87347, 64523, 31415};

    for (auto const score : bestScore)
        std::cout << score << std::endl;

    return 0;
}
+1 -0

Concernant ton problème de main(), je crois que sous Windows ton main doit s’appeler WINMAIN ou un truc du genre.

ntimeu

Si le problème vient de là, mieux vaut configurer correctement le projet à la base pour qu’il accepte le code standard (basiquement, choisir "Projet vide C++", et ajouter soi-même le fichier main règle le problème).

First : Always RTFM - "Tout devrait être rendu aussi simple que possible, mais pas plus." A.Einstein [Tutoriel Frama-C WP]

+0 -0

Sinon concernant les entrées/sorties, j’ai tendance à faire ça :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#include <iostream>

using std::cout;
using std::cerr;
using std::cin;
using std::endl;

int main() 
{

}

Après je sais pas si c’est une mauvaise pratique ou pas, d’ailleurs n’hésitez pas à me le dire si c’est le cas.

« La Nature est un livre écrit en langage mathématique », Galilée

+0 -0

C’est pas le top, on peut généralement être plus sélectif, vu qu’on n’est pas sensé faire de l’affichage de partout, mais c’est moins bordélique qu’un "using namespace std".

First : Always RTFM - "Tout devrait être rendu aussi simple que possible, mais pas plus." A.Einstein [Tutoriel Frama-C WP]

+1 -0

stdafx, on peut s’en passer sous windows, mais il faut commencer le projet en étant très explicite comme quoi on ne veut pas de fioritures en plus.

Pour std::cout, j’ai un snippet dans mon éditeur qui étend cout en std::cout et inclus <iostream> à la volée s’il ne l’était pas déjà. Et un raccourci (alt-s) qui se transforme en std::. (Au final, je ne fais des using (de ce genre) plus que pour profiter du Koenig-namespace/Argument-dependant lookup.)

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte