仍然得到二进制&#34;&lt;&lt;&#34;:没有找到哪个操作符,右键用<string>

时间:2016-11-29 18:19:52

标签: c++

#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

我可以看到包含字符串,但它只解决了>>运算符的问题。如果您查看代码,请在void printBook()我有一个cout命令cout << print[i];。发生错误的地方,而不是int main(){cout << "xd";}函数。为什么错误不会影响int main中的<<,而只会影响void phoneBook()?如果有人有一个很好的解决方案,我会非常高兴听到它。提前谢谢。

(你看到的代码还没有完成,而且我对C ++相对较新(对不起,如果看起来像是令人憎恶,并且代码中还有其他任何错误。)

3 个答案:

答案 0 :(得分:3)

cout << print[i];

print[i]的类型为phoneBook,而不是std::string。您的编译器告诉您没有定义将phoneBook放入输出流的函数。

一次打印一个成员,或定义一个函数

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

使原始行可编辑。

答案 1 :(得分:2)

此行导致编译错误:

cout << print[i];

您要求std::cout输出phoneBook。如果没有实现<< phoneBook的运算符,则无法实现此目的。

否则,您需要单独打印phoneBook的每个字段(就像在insertName中一样。

答案 2 :(得分:0)

问题在于

cout << print[i];

正如上面提到的其他人一样,但是还有另一种方法可以绕过而不实现覆盖运算符(这更自然,也就是你应该去的方式),那就是实现功能  std::string phoneBook::toString() ,它将返回代表电话簿的字符串,因此您的电话将如下所示:

cout << print[i].toString();