0

私はtranslator.hファイルに次のコードを持っています

class Dictionary
{

 public:
  Dictionary(const char dictFileName[]);
  void translate(char out_s[], const char s[]); 

そして、次のように、translator.cpp ファイルで関数を呼び出します。

for (int i=0; i<2000;i++) 
{
Dictionary:: translate (out_s[],temp_eng_words[i]); 
}

「']'トークンの前に一次式が必要です」というエラーが表示されます。何が悪いのか理解できません。上記のスニペットに問題がある場合は、コード全体を公開しないことにしました。

何か案は??

out_s の [] なしで既に試しましたが、「オブジェクトなしでメンバー関数 void Dictionary::translate (char*, const char *) を呼び出すことはできません」というエラーが表示されます。問題が何であるかをより明確に示すために、コード全体を投稿します。

Translator.cpp

#include <iostream>
#include <fstream>
#include <sstream>
#include <cstring>
#include "Translator.h"

using namespace std;

void Dictionary::translate(char out_s[], const char s[])
{
int i;
char englishWord[MAX_NUM_WORDS][MAX_WORD_LEN];

for (i=0;i < numEntries; i++)
{
if (strcmp(englishWord[i], s)==0)
break;
}

if (i<numEntries)
strcpy(out_s,elvishWord[i]);
}

char Translator::toElvish(const char elvish_line[],const char english_line[])

{
int j=0;
int k=0;
char temp_eng_words[2000][50];
char out_s;
//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
{

strcpy (temp_eng_words[k],word.c_str());

k++;

}

for (int i=0; i<2000;i++)
{
Dictionary:: translate (out_s,temp_eng_words[i]); // ERROR RELATES TO THIS LINE -     cannot call member function like this.    error -  expected primary expression
// before ] if written out_s[].

}
}



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();

}
}

翻訳者.h

const int MAX_NUM_WORDS=2000;
const int MAX_WORD_LEN=50;

class Dictionary
{

public:
Dictionary(const char dictFileName[]);
void translate(char out_s[], const char s[]); // s represents a wor out_s, the    translated word

private:

char englishWord[MAX_NUM_WORDS][MAX_WORD_LEN];
char elvishWord[MAX_NUM_WORDS][MAX_WORD_LEN];
int numEntries;
};

class Translator
{
public:
 Translator(const char s[]);
 char toElvish(const char out_s[],const char s[]);
 char toEnglish(char out_s[], const char s[]);

 private:
  Dictionary dict;

};
4

4 に答える 4

2

問題は合格ですout_s[]。これを試してください:

Dictionary::translate (out_s,temp_eng_words[i]); 

配列の場合out_sは、配列なしで渡す[]だけで十分です。

于 2013-05-18T12:59:04.840 に答える
1

コンパイラは、実際のパラメータに配列インデックスを期待していますout_s[]

とはどういう意味out_s[]ですか? out_sが の配列charまたは へのポインタである場合は、 (括弧なしで)charを渡します。out_s

于 2013-05-18T12:58:25.370 に答える
1

void translate(char out_s[], const char s[])最初に、 のような関数シグネチャは実際には と同等であることに注意してくださいvoid translate(char* out_s, const char* s)

渡そうとしている引数の 1 つは、out_s[]これは無効です。out_s配列自体(配列からポインターへの変換が行われる) またはその特定の要素を渡す必要がありますout_s[i]

私が立っているところから、あなたはパスしたいようですout_s

于 2013-05-18T12:58:58.560 に答える
1

試す

for (int i=0; i<2000;i++) 
{
  Dictionary:: translate (out_s,temp_eng_words[i]); 
}
于 2013-05-18T12:59:33.717 に答える