2016-02-12 6 views
-1

Мне нужно создать массив разных цветов, а второй массив будет для количества объектов, поэтому обнаруженный 1-й объект будет проходить через все цвета. У меня возникли проблемы с получением списка цветов в окне терминала.Ошибка со слишком большим количеством инициализаторов

Это то, что я должен далеко:

#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

неправильно, если то, что вам нужно, это станд :: строка, которая будет , также вы объявили массив размером 11, но я только насчитал 10 значений в инициализаторе. ты его забыл? в-третьих, вы не можете напечатать такой массив. (PS: использование пространства имен std; считается плохой практикой, привыкайте к предварительной фиксации вещей с помощью std: :) – Borgleader

ответ

1

1.

Правильным включают файл <string>. string.h - это C, и это C++.

2.

std::string объекты инициализируются с символьными строками.

'\0' 

не является символьной строкой. Это единственный персонаж. Он не входит в список инициализаторов.

3.

Я считаю девять строк в массиве (паразитных «\ 0» исключается), а не 11. Дополнительные элементы массива не больно, но они не нужны.

4.

cout << Color << endl; 

Color является массивом. Вы не можете писать целые массивы до std::cout, только один элемент, по одной строке за раз. Вам нужно просто перебрать массив Color и записать каждый отдельный элемент массива в std::cout. Предположительно со значимыми разделителями.

0

Color не является ни одной строкой, это массив строк, поэтому вам нужно сделать цикл для печати каждого из них. Кроме того, вам нужно найти хорошее место, чтобы узнать C++, потому что вещи, которые вы делаете из C.

<string.h> для строк C, <string> для C++ станд :: строка

'\0' в конце массива также является веществом 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

Я рекомендую использовать размер автоматического массива: 'string Color [] = {...}', вместо объявления 11 -элементный массив с 9 строками в инициализаторе. И, возможно, на самом деле упоминать, почему вы выбрали нулевой символ. – paddy

+0

Спасибо! Я попробую это и посмотрю, что произойдет! –

Смежные вопросы