如何将向量传递给以自定义对象作为参数的重载输出流?

时间:2014-12-02 17:11:05

标签: c++ object vector output

 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;
}

我正在尝试为创建矢量对象的类创建自定义输出流。该 输出应返回大小(即向量中的元素数)和向量中的元素。

现在的问题是当我创建一个新的示例类对象时,它只创建一个带有一个元素的向量。

例如,当我创建一个类似&#39;样本s(向量vec)的对象时;它可以理解地用一个项目创建一个对象。我已经尝试向构造函数添加更多参数,例如&#const; const vector&amp; vec(n),int n):vec(vec),n(n){}&#39;但它仍然无法正常工作。编译器返回一个错误:&#39; expected&#39;,&#39;或者&#39; ...&#39;之前&#39;(&#39;令牌。

3 个答案:

答案 0 :(得分:0)

您的错误与vector,流或访问控制完全无关。您只是使用无效语法来声明vec成员和构造函数参数。

编辑以回复更新的问题:

  

现在的问题是当我创建一个新的示例类对象时,它只创建一个带有一个元素的向量。

这是一个与原始问题不同的问题。你应该开一个新问题。

  

例如,当我创建一个类似&#39;样本s(向量vec)的对象时;它可以理解地用一个项目创建一个对象。

不,这声明了一个名为s的函数,它接受一个名为vector的{​​{1}}参数并返回vec。你真的需要了解语言的基本语法。

答案 1 :(得分:0)

为了使答案具体,你的构造函数必须是

 class example{
 // ...
 example(const vector<double> &vec_, int n_)
   : vec(vec_), n(n_)
 { }

 // ... 
};

这会将vec初始化为参数的副本,该参数应通过引用传递,以避免多余的副本。

答案 2 :(得分:0)

这一行:

vector<double> vec(n);

不能作为变量声明出现在类体内。它应该像这样初始化:

vector<double> vec = vector<double>(n); // copy-initialization

或使用成员初始化列表:

example(vector<double> vec const&) : vec(vec) { }

将从另一个实例复制构造它。