#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 ++相对较新(对不起,如果看起来像是令人憎恶,并且代码中还有其他任何错误。)
答案 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();