将typedefined数组分配给另一个(c ++)

时间:2013-11-07 21:53:22

标签: c++ arrays

我是编程的初学者。我目前的大学作业告诉我从文件中读取文本,只获得“有效”的单词, end而不是end.。我陷入了必须将一个新检测到的单词放入一系列单词的部分。

编译器错误是:数组必须使用大括号括起初始化程序初始化

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++];


                }
            }
        }
     }
    }

1 个答案:

答案 0 :(得分:0)

这是导致错误的行(你有两个):

  

单词单词=单词[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

希望这会有所帮助。