2017-09-26 4 views
-3

私は既にこれが重複としてマークされることを知っていますが、私はすでに見つけられたすべての解決策を試しています。エラーメッセージは、入力後に ")"が必要だと私に伝えていますが、読み込み中の情報をバックアップファイルに書き込む必要があります。どんな助けもありがとう。std :: getline(input、d.info)not working

class Data{ 
public: 
    const unsigned static int MAXIMUM_DATA = 4100u; 
const static int x = 0; 
string userName[MAXIMUM_DATA] = {}; 
string nickName[MAXIMUM_DATA] = {}; 
string role[MAXIMUM_DATA] = {}; 
string fName[MAXIMUM_DATA] = {}; 
string lName[MAXIMUM_DATA] = {}; 
string email[MAXIMUM_DATA] = {}; 
friend std::istream& operator>>(std::istream& input, Data& d); 
}; 

std::istream& operator>>(std::istream& input, Data& d){ 
std::istream& getline(input, d.userName); 
std::istream& getline(input, d.role); 
std::istream& getline(input, d.fName); 
std::istream& getline(input, d.lName); 
std::istream& getline(input, d.nickName); 
std::istream& getline(input, d.email); 
return input; 
} 

Data d; 
    while(myfile >> d){ 
     database.push_back(d); 
    } 
+0

'getline(input、d.userName);の前に' std :: istream& 'とは何ですか? – user463035818

+4

あなたのメンバー変数はすべて、 'MAXIMUM_DATA'文字列の*配列*です。それらは 'MAXIMUM_DATA'文字列ではありません。そして、あなたは本当に 'getline'を呼び出すのではなく、戻り値の型として' std :: istream& 'を使って宣言します。そして、関数が "宣言する"方法が無効で、ビルドエラーにつながります。おそらくあなたは[いくつかの良い初心者の本を見つけるために見つける必要があります](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)? –

+0

配列を単一の変数に変換し、次に 'Data'の' std :: vector'を持つことができます。 –

答えて

0

あなたの問題の1つは、std::getlineが関数宣言のように見えるということです。変更:

getline(input, /*...*/); 

データベースをエミュレートする場合は、レコードテーブルを使用することができます。

std::vector<Data_Record> database; 

はこれがあなたがするを意図したものであるように見える:

class Data_Record 
{ 
public: 
string userName; 
string nickName; 
string role; 
string fName; 
string lName; 
string email; 
friend std::istream& operator>>(std::istream& input, Data_Record& dr); 
}; 

あなたのデータベースのようにできるだけシンプルにすることができますよう

あなたは、レコードを定義することができます。