2017-10-05 3 views
1

私はC++を初めて使用しています。ここに私のコードです。単純です配列に文字列値を含むように設定するとエラーになります

#include <iostream> 
#include <fstream> 

using namespace std; 

const string WORD_FILE = ("/Users/matt/Desktop/C++/Hangman/Hangman/words.txt"); 
const int WORDS_USED = 20; 

string fillArray(string words[]); 

int main() { 
    string words[WORDS_USED]; 

    fillArray(words); 


} 

string fillArray(string words){ 
    string word; 
    ifstream inputStream; 
    inputStream.open(WORD_FILE); 
    while (int x=0 < WORDS_USED){ 
     inputStream >> word; 
     words[x] = word; 


    } 
    return words; 
} 

これを実行すると、「words [x] = word;」というエラーが表示されます。ライン。

Assigning to 'value_type' (aka 'char') from incompatible type 'string' 

私は私が間違ってやっているかわからないんだけど、またはそれが文字

+0

::参照してSTRING':

は、より多くのこのような何かを試してみてください。 –

+1

なぜ 'while'ループの条件式の中に' int x'を宣​​言していますか? 'while'ループの前に' x'を宣​​言してみてください。 –

+0

stringを使用する場合は、ヘッダーを含めます。関数の戻り値の型を修正する必要があるか、または参照渡しする必要があります。参照がないと、ローカル変数へのポインタを返すので、参照がより良いです。ベクトルの使用も検討してください。 –

答えて

1

コードにいくつかの誤りがあります。

std::stringオブジェクトを入力として受け入れ、出力としてstd::stringを返すと、fillArray()が宣言されました。しかし、あなたの関数定義では、入力パラメータは配列として宣言されておらず、代わりにstd::stringという単一のものです。そのため、コンパイルエラーが発生します。実際には、std:::ifstreamから読み取ったstd::stringを1つのcharに割り当てようとしています。

また、whileループの構文はすべて間違っています。しかし、たとえそうでなくても、xが増分されていないので、ループが20単語に達したときにループが破られることはありません。 ifstreamの読み込みでエラー処理を行っていないため、ループはEOFに達したときや読み取りエラーが発生したときに途切れることはありません。あなたは `のstdを渡す必要があり

#include <iostream> 
#include <string> 
#include <fstream> 

using namespace std; 

const string WORD_FILE = "/Users/matt/Desktop/C++/Hangman/Hangman/words.txt"; 
const int WORDS_USED = 20; 

int fillArray(string words[]); 

int main() { 
    string words[WORDS_USED]; 
    fillArray(words); 
    return 0; 
} 

int fillArray(string words[]) { 
    ifstream inputStream(WORD_FILE); 
    string word; 
    int numWords = 0; 
    while ((numWords < WORDS_USED) && (inputStream >> word)) { 
     words[numWords] = word; 
     ++numWords; 
    } 
    return numWords; 
} 
2

として何かを取っている理由をあなたは自分の関数定義にタイプミスがあります

string fillArray(string words){ 
    ... 
} 

words必要がありますそこに配列、つまりwords[]です。コンパイラは、定義シグネチャがファイルの前の宣言と一致しないことを警告する必要があります。

関連する問題