C++でこんなクラスを作りたい。
以下のようなことをしたいと思っています。C++初学者です。
長いかもしれませんがずっと悩んでいます。
いま
w(x) = ap(x) + bq(x) + cr(x) + .....
のような式を計算機実験でメインに扱おうと思っています。
項の数は時によりけりです。
(a,b,cは係数、p,q,rは関数です)
それぞれのp,q,rは同じ構造をした式であり、また係数a,b,cを
p,q,rの付属物だと考えてcomponentというクラスのインスタンスにしました。
class component{
//メンバ変数
double a //係数
mathvec mu //平均値,mathvecは自作の加減法などができるベクトルのクラス
double sigma //分散
//メンバ関数は割愛
}
な感じです。
さて、それで上であげたw(x)のような関数が何種類か登場するので
同じ式に属するcomponentのインスタンスをグループ化するようなクラスをつくりたいのです。
w = ap + bq + cr
z = ku + mv + ng
を扱うのならばとりあえずp,q,r,u,v,gを宣言した跡に
mixture mix1(p,q,r);
mixture mix2(u,v,g);
のようにできるmixtureというクラスを作りたいのです。
それで
mix2.at(0)->method(); (u.method()と同じ感じ)
みたいな操作ができるとうれしいです。
自分で少し考えたのはmixtureがcomponent*を格納する
STLのvectorをもつようにすればいいかなと思いましたが
どうもコンパイルエラーがぜんぜん取れず困っております。
class mixture{
private:
vector<component *> vec;
public:
mixture(int num, ...); //numはp,q,rなどの個数
component *at(int num); //numは何番目の要素を返すか
};
mixture::mixture(int num, ...){
va_list ap;
va_start(ap,num);
for(int i=0;i<num;i++){
vec.push_back(va_arg(ap,component&);
}
}
component* mixture::at(int num){
return vec.at(num);
}
お願いします!
特にISO C++ forbids declaration of vector with no type
みたいなエラーがまず出ます。コンパイラはg++です。