2013-05-18 40 views
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 *)without object」。我會發布整個代碼,以更清楚地表明問題可能是什麼。

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

} 
} 

translator.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; 

}; 
+0

關於你提到的第二個錯誤:'translate'是Dictionary'的'非靜態成員。您必須將其稱爲「Dictionary」的實例。似乎在'Translator'類中有一個,所以你可能的意思是'dict.translate(out_s,temp_eng_words [i]);'' – Angew

回答

1

編譯器預計實際參數out_s[]數組索引。

你是什麼意思out_s[]?如果out_schar的數組或指向char的指針,則通過out_s(不包括括號)。

1

首先請注意,像void translate(char out_s[], const char s[])這樣的函數簽名實際上等同於void translate(char* out_s, const char* s)

你試圖通過的其中一個參數是out_s[] - 這是無效的。你或者需要傳遞數組out_s(它將進行數組到指針的轉換)或者它的一個特定元素out_s[i]

從我站在的地方看來,你想通過out_s

2

問題是通過out_s[],試試這個:

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

如果out_s是一個數組,然後通過它沒有[]就夠了。

1

嘗試

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