2013-11-07 4 views
1

Я начинаю программировать. В моем текущем университетском задании мне предлагается прочитать текст из файла и получить «действительные» слова, т.е.end вместо end.. Я застрял в той части, где я должен положить новое обнаруженное слово в массив слов.Назначение typedefined массива другому (C++)

Compiler ошибка: массив должен быть инициализирован с помощью брекет-заключенный инициализаторе

int const MAX_WORDS = 100000; 
int const MAX_WORDLENGTH = 80; 
typedef char Word [MAX_WORDLENGTH]; 
typedef Word Words [MAX_WORDS]; 
Words words ; 

bool read_file (char filename [80]) 
{ 
    ifstream file(filename); 
    if(!file) { 
     cout << "wrong filename"; 
     return false; 
    } 
    char c; 
    int word_idx = 0; 
    Word word = words[word_idx++]; 
    int letter_idx = 0; 
    int connector_count = 0; 
    while (file.get(c)) { 
    if ((c>='A' && c<='Z')||(c>='a' && c<='z')) 
    { 
     word[letter_idx++] = c; 
     cout << c << endl; 
    } 
    else { 
     if (c == '-') { 
      if(connector_count==0) { 
       word[letter_idx++] = c; 
       connector_count++; 
      } 
      else { 
       if(connector_count==1) { 
        word[letter_idx-1] ='\n'; 
        Word word = words[word_idx++]; 


       } 
      } 
     } 
    } 
    } 
+0

И 'слова' есть ....? В этом отношении «Слово» есть ...? (Я предполагаю typedef для массива 'char' на последнем). * Редактировать: * Ну посмотрите на это, хрустальный шар все еще имеет некоторый блеск. – WhozCraig

+0

извините, забыл строки typedef ... они теперь отредактированы! – Julius361

+0

Я собираюсь предположить, что какой-то академик сказал вам, что использование 'std :: string' вне таблицы, потому что это значительно облегчило бы это *. – WhozCraig

ответ

0

это линия, которая вызывает ошибку (у вас есть два из них):

Слово word = words [word_idx ++];

инициализации массива путем присвоения является незаконным в C++, так, например, если у вас есть что-то вроде этого:

typedef char string[5]; 
string str = "hello"; 

и вы пытаетесь сделать что-то вроде этого:

string str2 = str;

вам Получи ту же ошибку, что и у тебя. как вы справляетесь с этим, является в том числе

#include <string.h> и делает это:

memcpy(str2, str, sizeof(string));

так в вашем случае, вместо Word word = words[word_idx++];, вы должны сделать это:

Word word; //declare variable 
memcpy(word, words[word_idx++], sizeof(Word)); //copy to variable 

из Конечно, если вы хотите избежать будущих головных болей, используйте std::string.

надеюсь, что это поможет.

+0

Awesome. Большое спасибо! Это помогло мне. – Julius361

+0

@ Julius361 не беспокойтесь! также, взгляните на повторное объявление и инициализацию 'word' в последнем блоке' if', упомянутом в другом комментарии, это может вызвать проблему. – stellarossa

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