0
宿題プログラムの構文に問題があります。プロンプトは、それが適切にプログラムフラグメントを実行できるようにインサータをオーバーロードすることです:だから構造体のベクトルに<<をオーバーロードする方法
for (int i = 0; i < v.size(); ++i) cout << v[i] << endl; cout << endl;
を、これは私がこれまで持っているものですが、私はまだcoutの< <でエラーが出ますV [i]の声明(バイナリ式に無効なオペランド):
unsigned int seed;
struct node
{
int integer;
double value;
};
double random(unsigned int &seed);
void initialize_vector(vector<node> &v);
template<typename T>
void print_vector(const vector<T> &v);
template<typename T>
ostream &operator <<(ostream &out, const vector<T> &v);
template<typename T>
void output(ostream &out, const vector<T> &v);
int main()
{
vector<node> v(10);
initialize_vector(v);
print_vector(v);
return 0;
}
double random(unsigned int &seed)
{
const int MODULUS = 15749;
const int MULTIPLIER = 69069;
const int INCREMENT = 1;
seed = ((MULTIPLIER * seed) + INCREMENT) % MODULUS;
return double(seed)/double(MODULUS);
}
void initialize_vector(vector<node> &v)
{
for (int i = 0; i < v.size(); ++i)
{
v[i].integer = int (11 * random(seed));
v[i].value = double (11 * random(seed));
}
}
template<typename T>
void print_vector(const vector<T> &v)
{
for (int i = 0; i < v.size(); ++i)
cout << v[i] << endl;
cout << endl;
}
template<typename T>
ostream &operator <<(ostream &out, const vector<T> &v)
{
output(out, v);
return (out);
}
template<typename T>
void output(ostream &out, const vector<T> &v)
{
cout << v.integer;
cout << setprecision(2) << fixed << setw(6) << v.value;
}
私は最後の3つの機能のためのconst参照でとせずに渡すとともに、代わりにTの通過ノードを試してみたので、再び、私は私の構文を想定ボイド出力関数では何とか間違っています。正しい方向への助けや助言をいただければ幸いです。
*注:ostream &演算子関数を変更することはできません。
のためにオペレータ< <をオーバーロードするために、1つ以上の機能を必要としています。 「ostreamと演算子の機能を変更できません」という意味はどうですか?私はあなたが 'operator <<(ostream&、foo)'関数を意味すると思いますか?既に_all_ベクトルのために変更/追加しています。なぜあなたは 'constノード 'を特化できないのですか? –
ノードは 'ostream&operator <<(ostream&out、const node & n);' –
@ Dththomhasです。私の教授が私のために提供したものなので、関数内のものは変更できません。 'テンプレート'を使用する必要はないでしょうか?そして@Aluanはそれが別の関数か、オリジナルの 'operator <<'関数を変更していますか? –
minty59