如何将 vector 传递给将自定义对象作为参数的重载输出流
How to pass vector to a overloaded output stream that takes a custom object as an argument?
class example{
int n;
vector <double> vec;
example(const vector <double> &vec) : vec(vec){}
void set_data(const vector<double> &v){vec = v;}
const vector<double> &get_data() const {return vec;}
};
ostream &operator<< (ostream &output, const sample &s){
return output << "< " << s.get_data().size() << " : " << //element1 << element2 << //elementN;
}
我正在尝试为创建矢量对象的类创建自定义输出流。这输出应返回大小(即向量中的元素数)和向量中的元素。
现在的问题是,当我创建一个新的示例类对象时,它只创建一个带有一个元素的向量。
例如,当我创建一个像'sample s(vector vec)这样的对象时;它可以理解地创建一个带有一个项目的对象。我尝试向构造函数添加更多参数,例如"const vector &vec(n), int n): vec(vec), n(n){}",但它仍然不起作用。编译器返回一个错误,指出:"预期","或"..."在"("标记之前。
为了使答案具体化,您需要构造函数
class example{
// ...
example(const vector<double> &vec_, int n_)
: vec(vec_), n(n_)
{ }
// ...
};
这会将vec
初始化为参数的副本,应通过引用传递该参数以避免多余的副本。
这一行:
vector<double> vec(n);
不能作为变量声明显示在类体内。它应该像这样初始化:
vector<double> vec = vector<double>(n); // copy-initialization
或使用成员初始值设定项列表:
example(vector<double> vec const&) : vec(vec) { }
这将从另一个实例复制构造它。
您的错误与vector
、流或访问控制完全无关。您只是使用无效的语法来声明 vec
成员和构造函数参数。
编辑以回答更新的问题:
现在的问题是,当我创建一个新的示例类对象时,它只创建一个带有一个元素的向量。
这是一个与你原来的问题不同的问题。您应该打开一个新问题。
例如,当我创建一个像'sample s(vector vec)这样的对象时;它可以理解地创建一个带有一个项目的对象。
不,这声明了一个名为 s
的函数,该函数接受名为 vec
的vector
参数并返回一个sample
。你真的需要把语言的基本语法写下来。
相关文章:
- 使用模板参数重载C++方法:如何使其适用于模板的子类?
- 如何使用类的参数重载运算符+?
- 为什么我不能用两个参数重载 C++ 运算符 []?
- 模板化类参数重载
- 模板参数重载,最后一个参数为非类型名
- MSVC编译器错误将模板与枚举参数重载时
- std::map:使用键类以外的参数重载运算符<
- C++用参数重载友元类函数参数
- 如何在参数重载解析中禁用隐式转换为指向 void 的指针
- 使用可选参数重载 new 和 delete 运算符
- 如何通过参数函子参数重载函数切换
- 同时使用参数重载和返回类型重载
- 特征3,并根据模板参数重载新算子,以确保正确对齐
- C++使用默认参数重载
- 单例方案,使用不同的参数重载 getInstance
- 具有'const'参数重载的可变参数模板
- 是fill_n,并填充相同的函数,但具有不同的参数重载
- 用不同的参数重载运算符两次
- 模板非类型参数重载
- 无法推断模板参数/'n'重载都无法覆盖所有参数类型