2016-11-29 9 views
0
#include <iostream> 
#include <cstdlib> 
#include <string> 
#include <time.h> 
using namespace std; 

struct phoneBook 
{ 
    string name; 
    string address; 
    string phoneNumber; 
}; 

void insertName(phoneBook print[]) 
{ 
    print[256]; 
    for (int i = 0; i < 1; i++) 
    { 
     cin >> print[i].name; 
     cin >> print[i].address; 
     cin >> print[i].phoneNumber; 
    } 
} 

void printBook(phoneBook print[]) 
{ 
    print[256]; 
    for (int i = 0; i < 256; i++) 
    { 
     cout << print[i]; 
    } 


} 

int main() 
{ 
    srand(time(NULL)); 
    cout << "xd"; 
} 

と右側をとる見つからない、私はエラーを取得します。エラーはbinary "<<": no operator found which takes a right-hand withです。は依然として「<<」バイナリ得る:NOオペレータは上記のコードで<string>

文字列が表示されていますが、>>オペレータの問題を解決するだけです。コードを見るとvoid printBook()にはcoutのコマンドcout << print[i];があります。これは、エラーが発生した場所で、int main(){cout << "xd";}の機能ではありません。なぜエラーはintメインの<<には影響しませんが、void phoneBook()にのみ影響しますか?もし誰かがこれに対して素晴らしい解決策を持っていれば、私はそれを聞いて喜んでいるだろう。前もって感謝します。

(あなたが見るのコードがまだ終わっていない、と私はそれが醜態のように見えるとあれば、コード内の任意の他のエラーがある場合。)++(ごめんCに比較的新しいです。)

+1

あなたは 'print [256];とは何と思いますか?そして、あなたは 'print [i]'は何だと思いますか? – user2357112

+0

これは話題にはなりませんが、関連性があります:現代のC++では、Cスタイルの配列( 'int foo [42]; phoneBook bar [100];')を使用しないでください。 (しかし、多くの古い教科書やガイドはこれを教えています。)代わりに 'std :: vector'を使用してください。例えば、' std :: vector phoneBooks; ' –

答えて

3
cout << print[i]; 

print[i]のタイプがphoneBookであり、std::stringではありません。あなたのコンパイラは、phoneBookを出力ストリームに入れるための関数が定義されていないことを伝えています。

どちらの印刷メンバー一度に、またはあなたの元のラインコンパイルを行うことが

std::ostream& operator<<(std::ostream& os, phoneBook book); 

関数を定義します。

cout << print[i]; 

あなたは出力phoneBookstd::coutを求めている:

2

この行は、コンパイラのエラーを引き起こしています。 <<の演算子を実装しないと、phoneBookが必要になります。

そうしないと、あなたはinsertNameで行うように(別々phoneBookの各フィールドを印刷する必要があります。

0

を問題は、他の人以上に述べたように

cout << print[i]; 

にありますが、別の方法にはありオーバーライドされた演算子を実装せずに移動してください(これはもっと自然であり、あなたは行かなければなりません)。それは関数 std::string phoneBook::toString() を実装することです。電話帳を表す文字列が返されるので、あなたの呼び出しは

cout << print[i].toString(); 
関連する問題