C++ 为什么C++;自定义结构向量是否存在ostream重载问题?
我已经写了一个代码,它必须遍历一个向量并打印它的内容。我得到一个错误: dfs.cpp:45:16:错误:与“运算符*”不匹配(操作数类型为“常量特征”)C++ 为什么C++;自定义结构向量是否存在ostream重载问题?,c++,vector,C++,Vector,我已经写了一个代码,它必须遍历一个向量并打印它的内容。我得到一个错误: dfs.cpp:45:16:错误:与“运算符*”不匹配(操作数类型为“常量特征”) std::cout您得到的错误告诉您ostream操作符没有适用于trait类型的对象的规则。最“C++nic”的方法是重载您得到的错误告诉您ostream操作符没有适用于trait类型的对象的规则。要做到这一点,最“C++nic”的方法是在使用iostream操作符时为istream和ostream重载,或者为cout和cin或ifstre
std::cout您得到的错误告诉您ostream操作符没有适用于
trait
类型的对象的规则。最“C++nic”的方法是重载您得到的错误告诉您ostream操作符没有适用于trait
类型的对象的规则。要做到这一点,最“C++nic”的方法是在使用iostream操作符
时为istream
和ostream
重载,或者为cout
和cin
或ifstream
,ofstream
或fstream
对象以编译器或编写编译器的人的方式来考虑它
这些是模板类型。用户将创建具有各种类型的模板,这些类型可以内置或自定义用户定义。要向用户提供这种能力,编译器如何知道在您的情况下将使用列表的ostream
是否是列表
,列表
,列表
?因此,当使用iostream操作符时,您必须自己为您想要支持操作符的所有类型创建重载(
和操作符),无论是cout
和cin
还是ifstream
,ofstream
或fstream
对象以编译器或编写编译器的人的方式来考虑它
这些是模板类型。用户将创建具有各种类型的模板,这些类型可以内置或自定义用户定义。要向用户提供这种能力,编译器如何知道在您的情况下将使用列表的ostream
是否是列表
,列表
,列表
?因此,您必须自己为要支持运算符>>()
和运算符的所有类型创建重载。您需要重载运算符。为什么会存在内置的运算符?标准容器不存在内置的运算符,你必须为自己编写一个重载。给能工作的代码并为没有显示的代码提供错误消息没有多大意义。请提供一份报告。谢谢。您需要重载运算符为什么会存在内置的运算符?标准容器不存在内置的运算符,您必须自己编写一个重载。给出有效的代码并为未显示的代码提供错误消息没有多大意义。请提供一份报告。谢谢。“nic”绝对不是这里使用的后缀。被困于太过努力地模仿pythonic这个词?“nic”绝对不是这里要使用的后缀。被抓到努力模仿pythonic这个词?
#include<iostream>
#include<list>
#include<vector>
#include<stdio.h>
using namespace std;
struct traits
{
int x;
bool visit;
std::list<int> friends;
};
int main()
{
cout << "Enter the number of employees: " << endl;
int noOfEmployees, noOfFriends;
cin>>noOfEmployees;
std::vector<traits> employees;
int i = 0; int j;
while(noOfEmployees--){
traits v;
v.x = i;
cout << "Enter the no of friends: " << endl;
cin >> noOfFriends;
while(noOfFriends--){
cin>>j;
v.friends.push_back(j);
}
v.visit = false;
employees.push_back(v);
}
std::vector<char> path;
path.push_back('a');
path.push_back('l');
path.push_back('i');
path.push_back('a');
for (std::vector<char>::const_iterator i = path.begin(); i != path.end(); ++i){
std::cout << *i << ' ';
}
for(std::vector<traits>::iterator v = employees.begin(); v != employees.end(); ++v){
std::cout<<*v<<endl;
}
}
std::string to_string(const traits& t) {
/// Code to generate a string representation of your traits object
}
for (const auto emp& : employees){
std::cout<< to_string(emp) << ' ';
}