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;令牌。
答案 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) { }
将从另一个实例复制构造它。