私にエラーメッセージを表示する部分は、演算子にオーバーロードするfriend関数の定義を書き込んだときに、 +。 Statisticianはタイプを指定していないと言っています。しかし、それは友人の機能であり、ヘッダーが含まれている実装ファイルに記述されているので、なぜこれを認識できないのかわかりません。また、私はファイル名の統計学者の間違いを覚えていますが、コードブロック内のファイルの名前を簡単に変更する方法はわかりません。"+"演算子をオーバーロードしようとすると、クラスに名前の型がないというエラーメッセージが表示される
//header file
#ifndef STATISTICIAN_H
#define STATISTICIAN_H
namespace GREGORY_STOCKER_STATICTICIAN{
class Statistician{
public:
Statistician();
void next_number(double);
void erase_sequence();
int get_length() const {return length_sequence;}
double get_sum() const{return sum;}
double get_mean() const;
double get_largest() const;
double get_smallest() const;
double get_last() const;
friend Statistician operator + (const Statistician &,const Statistician &);
private:
int length_sequence;
double sum;
double smallest;
double largest;
double last;
};
#endif
}
//implementation file
using namespace std;
#include "Statictician.h"
#include <iostream>
#include <cassert>
namespace GREGORY_STOCKER_STATICTICIAN{
Statistician :: Statistician()
{
length_sequence = 0;
sum = 0;
smallest = 0;
largest = 0;
last = 0;
}
void Statistician :: next_number(double num)
{
length_sequence += 1;
sum += num;
if(length_sequence == 1)
{
smallest = num;
largest = num;
}
if (num < smallest)
smallest = num;
if (num > largest)
largest = num;
last = num;
}
void Statistician :: erase_sequence()
{
length_sequence = 0;
sum = 0;
smallest =0;
largest = 0;
last = 0;
}
double Statistician :: get_mean() const
{
assert(length_sequence > 0);
return sum/2;
}
double Statistician :: get_largest() const
{
assert(length_sequence > 0);
return largest;
}
double Statistician :: get_smallest() const
{
assert(length_sequence > 0);
return smallest;
}
double Statistician :: get_last() const
{
assert(length_sequence > 0);
return last;
}
}
//the part that is tripping the error message
Statistician operator +(const Statistician &s1,const Statistician &s2)
{
Statistician s3;
s3.sum = (s1.sum + s2.sum);
s3.sequence_length = (s1.sequence_length + s2.sequence_length;
if(s1. largest > s2.largest)
s3.largest = s1.largest;
else
s3.smallest = s2.smallest;
if(s1. smallest < s2.smallest)
s3.smallest = s1.smallest;
else
s3.smallest = s2.smallest;
s3.last = s2.last;
return s3;
}
Code :: Blocksでファイルの名前を変更するには、Project Management(デフォルトのビューでファイル名がすべて入っている左側のペイン)を右クリックし、[ファイル名を変更]を選択します –