2014-04-07 4 views
1
#include<string> 
#include<iostream> 
using namespace std; 

struct letter 
{ 
    string lines[5]; 
}s[26]; 

int main() 
{ 
    //struct letter s[25]; 
    s[0].lines =  // error while initializing here 
    { 
     "..*..", 
     ".*.*.", 
     ".***.", 
     ".*.*.", 
     ".*.*." 
    }; 

    s[1].lines[5] = // also if I do this 
    { 
     ".**..", 
     ".*.*.", 
     ".***.", 
     ".*.*.", 
     ".**.." 
    }; 

    return 0; 
} 

Проверить здесь:Ideone LinkC++ структура 2D член строка инициализации

Я не могу понять, что не так с этим кодом. Я пробовал много способов. Я даже изменил член структуры на массив 2d char, но получаю ту же самую проблему. Пожалуйста, помогите!

Составление Информация:

prog.cpp: В функции 'Int основной()':
ошибка: ожидается, первичное выражение перед '{' маркера
ошибка: ожидается ';' before '{' token
ошибка: ожидаемое первичное выражение перед '{' токен
error: expected ';' до '{' токен

+0

я столкнулся вопрос только от начала основной функции. Ошибка при инициализации строковой строки. – Vanessa

+0

Список инициализаторов массива действителен только тогда, когда вы объявляете и определяете массив в одной строке, например 'string s [2] = {" a "," b "}' – texasbruce

+0

@texasbruce: Пожалуйста, проверьте, прежде чем что-либо подтвердить ! :) – Vanessa

ответ

0

Способ инициализации массива s[26] подходит только при объявлении.

Вот как вы можете сделать это в вашем коде:

struct letter 
{ 
    string lines[5]; 
}; 

letter s[26] = 
{ 
    { 
     "..*..", 
     ".*.*.", 
     ".***.", 
     ".*.*.", 
     ".*.*." 
    }, 
    { 
     ".**..", 
     ".*.*.", 
     ".***.", 
     ".*.*.", 
     ".**.." 
    } 
}; 

Или еще лучше, если вы на самом деле не нужны letter структуру:

string letter[26][5] = 
{ 
    { 
     "..*..", 
     ".*.*.", 
     ".***.", 
     ".*.*.", 
     ".*.*." 
    }, 
    { 
     ".**..", 
     ".*.*.", 
     ".***.", 
     ".*.*.", 
     ".**.." 
    } 
}; 
+0

Спасибо. Я хотел бы остановиться, но у меня нет даже 15 очков. Ну, мне нравятся стратегии, но это не завершает ответ в целом :) – Vanessa

+0

@ user3507787: Почему бы и нет? В этом вопросе говорится, «что не так с этим кодом». В ответе говорится: «Инициализируйте свои массивы при объявлении», что означает, что этот код неверен, потому что вы инициализируете свои массивы ** после ** объявления. Ответ также показывает, как это сделать, и, кроме того, предлагает упрощенную версию, которая может быть подходящей для ваших нужд. Поэтому я бы сказал, что это довольно полный ответ на ваш вопрос. –

+0

@barakmanos: Я не вижу «что не так с этим кодом», но я вижу «я не могу понять, что не так с этим кодом». Я думаю, что ответ будет улучшен путем упоминания _why_ его код не удался. –

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