我正在制作一个翻译/音译程序,它读取一个英文故事,并使用英语/精灵字典将其翻译成精灵语。在下面显示的代码之后,我解释了我收到的错误。
我有很多代码,我不确定是否应该发布所有代码,但我会发布我认为应该足够的内容。如果我的代码看起来很奇怪,我会道歉 - 但我只是一个初学者。
有一个主文件,一个带有两个类的标题文件:翻译和字典,以及 cpp 文件来实现类函数。
我有一个构造函数,可以在字典文件中读取 dictFileName ,并将英文单词复制到 englishWord ,并将精英单词复制到 elvishWord :
Translator::Translator(const char dictFileName[]) : dict(dictFileName)
{
char englishWord[2000][50];
char temp_eng_word[50];
char temp_elv_word[50];
char elvishWord[2000][50];
int num_entries;
fstream str;
str.open(dictFileName, ios::in);
int i;
while (!str.fail())
{
for (i=0; i< 2000; i++)
{
str>> temp_eng_word;
str>> temp_elv_word;
strcpy(englishWord[i],temp_eng_word);
strcpy(elvishWord[i],temp_elv_word);
}
num_entries = i;
}
str.close();
}
在主文件中,英文行被读入 toElvish 函数,并被标记为一个单词数组 temp_eng_words 。
在这个toElvish函数中,我正在调用另一个函数;翻译,读入 temp_eng_words ,并且应该返回精灵语:
char Translator::toElvish(char elvish_line[],const char english_line[])
{
int j=0;
char temp_eng_words[2000][50];
//char temp_elv_words[2000][50]; NOT SURE IF I NEED THIS
std::string str = english_line;
std::istringstream stm(str);
string word;
while( stm >> word) // read white-space delimited tokens one by one
{
int k=0;
strcpy (temp_eng_words[k],word.c_str());
k++;
}
for (int i=0; i<2000;i++) // ERROR: out_s was not declared in this scope
{
Dictionary::translate (out_s,temp_eng_words[i]); // ERROR RELATES TO THIS LINE
}
}
这是翻译功能:
char Dictionary::translate (char out_s[], const char s[])
{
int i;
for (i=0;i < numEntries; i++)
{
if (strcmp(englishWord[i], s)==0)
break;
}
if (i<numEntries)
strcpy(out_s,elvishWord[i]);
}
我的问题是,当我运行程序时,我收到错误' * out_s未在此范围内声明* '。
如果你已经阅读了所有这些,谢谢;任何建议/线索将不胜感激。 :)
答案 0 :(得分:0)
如下面的代码所示,您在函数中使用了out_s,但尚未在函数中声明它。 您可以在函数中使用全局变量或局部变量。我建议您阅读this
char Translator::toElvish(char elvish_line[],const char english_line[]) {
int j=0;
char temp_eng_words[2000][50];
//char temp_elv_words[2000][50]; NOT SURE IF I NEED THIS
std::string str = english_line;
std::istringstream stm(str);
string word;
while( stm >> word) // read white-space delimited tokens one by one
{
int k=0;
strcpy (temp_eng_words[k],word.c_str());
k++;
}
for (int i=0; i<2000;i++) // ERROR: out_s was not declared in this scope
{
Dictionary::translate (out_s,temp_eng_words[i]); // ERROR RELATES TO THIS LINE
}}