2016-02-12 3 views
-1

J'ai besoin de créer un tableau de couleurs différentes et le second tableau correspond au nombre d'objets, donc le premier objet détecté passerait à travers toutes les couleurs. J'ai du mal à faire apparaître la liste des couleurs dans la boîte à bornes.Erreur avec trop d'initialiseurs

C'est ce que je dois beaucoup:

#include < iostream> 
#include < string.h> 
using namespace std; 
int main() { 
    string Color[11] = { "Red", "Blue", "Green", "Purple", "Yellow", "Black", "White", "Orange", "Brown", '\0' }; 
    cout << Color << endl; 
    return 0; 
} 
+0

est faux si ce que vous avez besoin est std :: string, ce serait , vous a également déclaré tableau de taille 11, mais je ne comptiez 10 valeurs dans le initialiseur. en as-tu oublié un? Troisièmement, vous ne pouvez pas imprimer un tableau comme ça. (PS: utiliser namespace std; est considéré comme une mauvaise pratique, s'habituer à pré-réparer les choses avec std: :) – Borgleader

Répondre

1

1.

Le fichier est correct comprennent <string>. string.h est C, et ceci est C++.

2.

std::string objets sont initialisés avec des chaînes de caractères.

'\0' 

n'est pas une chaîne de caractères. C'est un seul personnage. Il n'appartient pas à la liste d'initialisation.

3.

je compte neuf chaînes dans votre tableau (le faux « \ 0 » exclus), et non 11. Les éléments de tableau supplémentaires ne font pas mal, mais ils sont inutiles.

4.

cout << Color << endl; 

Color est un tableau. Vous ne pouvez pas écrire des tableaux entiers à std::cout, un seul élément, une chaîne à la fois. Vous devez simplement parcourir le tableau Color et écrire chaque élément de tableau individuel sur std::cout. Vraisemblablement avec des séparateurs significatifs.

0

ColorColor n'est pas une seule chaîne, c'est un tableau de chaînes, donc vous devez faire une boucle pour imprimer chacune d'elles. De plus, vous devez trouver un bon endroit pour apprendre le C++, parce que les choses que vous faites est de C.

<string.h> est pour les chaînes C, <string> est C++ std :: string

Le '\0' à la fin du tableau est aussi une chose C.

const char * pointers[] = {"HELLO","WORD", '\0' }; // the third element is a NULL pointer (in C++11 now you can use nullptr) 

int i = 0; 
while (pointers[i] != nullptr) 
    std::cout << pointers[i++]; 

Demo

#include <iostream> 
#include <string> 

using namespace std; 
int main() { 
    // You don't need to specify the size, the compiler can calculate it for you. 
    // Also: a single string needs a '\0' terminator. An array doesn't. 
    string Color[] = { "Red", "Blue", "Green", "Purple", "Yellow", 
         "Black", "White", "Orange", "Brown"}; 

    for (const auto& s : Color) // There's multiple ways to loop trought an array. Currently, this is the one everyone loves. 
     cout << s << '\t'; // I'm guessing you want them right next to eachother ('\t' is for TAB) 

    // In the loop &s is a direct reference to the string stored in the array. 
    // If you modify s, your array will be modified as well. 
    // That's why if you are not going to modify s, it's a good practice to make it const. 

    cout << endl; // endl adds a new line 

    for (int i = 0; i < sizeof(Color)/sizeof(string); i++) // Old way. 
     cout << Color[i] << '\t'; 
    cout << endl; 

    for (int i = 3; i < 6; i++) // Sometimes u just want to loop trough X elements 
     cout << Color[i] << '\t'; 
    cout << endl; 

    return 0; 
} 
+0

Je recommande d'utiliser la taille automatique du tableau: 'string Color [] = {...}', au lieu de déclarer 11 -element array avec 9 chaînes dans l'initialiseur. Et peut-être en fait mentionner pourquoi vous avez retiré le caractère nul. – paddy

+0

Merci! Je vais essayer et voir ce qu'il se passe! –