Tableau qui ne marche pas c++

Le problème exposé dans ce sujet a été résolu.

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 :)

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.

-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;
}

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).

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.

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;
}

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).

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.

+0 -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.)

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

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