アップデート::
OK、ヘッダーファイルに次の新しい行があります。
static void gcdStatsCounter();//increments counter
static void display(); // displays the gcdStats
static int gcdStats;//• calls to gcd
public: // interface routines
static void statistics(); // print statistics
次に、cppファイルに追加しました。
int Rationalnumber::gcdStats(0);//initialization
void Rationalnumber::gcdStatsCounter() { // counter incrementer
gcdStats++;
}
void Rationalnumber::display() {// displays the gcdStats
cout << "gcdStats = " << Rationalnumber::gcdStats << endl;
}
void statistics() {
Rationalnumber::display();
} // print statistics
それは私にエラーを与えています:static void Rationalnumber :: display()はprivateです。課題は、プライベートメンバーを追加するだけで、インターフェイスルーチンには触れないことです:(フレンド関数は避けてください。何かアイデアはありますか?
元の投稿::
セクションの下の静的カウンター変数の更新に問題があります:// MY MEMBERS
ルール:「インターフェースのGIVENコードのメンバーを変更、追加、または削除しないでください。必要に応じてプライベートメンバーを追加できますが、他の変更は許可されません。」
私の問題は、新しいパブリック関数を作成せずにプライベートメンバーを更新するにはどうすればよいですか?静的プライベートメンバー変数にアクセスするには、静的プライベートメンバー関数が必要であることを理解しています。ただし、静的プライベートカウンター変数にアクセスしようとすると、「...への未定義の参照」というエラーが発生します。たとえば、gcdStatsのこのプライベートカウンター関数(静的として宣言)では、次のようなエラーが発生します。
void Rationalnumber::gcdStatsCounter() {
gcdStats++;
}
ヘッダーファイル:
#ifndef RATIONALNUMBER_H
#define RATIONALNUMBER_H
#include <iostream>
// HEADER FILE
class Rationalnumber
{
friend bool operator==( Rationalnumber l, Rationalnumber r );
friend bool operator!=( Rationalnumber l, Rationalnumber r );
friend bool operator<( Rationalnumber l, Rationalnumber r );
friend bool operator<=( Rationalnumber l, Rationalnumber r );
friend bool operator>( Rationalnumber l, Rationalnumber r );
friend bool operator>=( Rationalnumber l, Rationalnumber r );
friend Rationalnumber operator+( Rationalnumber l, Rationalnumber r );
friend Rationalnumber operator-( Rationalnumber l, Rationalnumber r );
friend Rationalnumber operator*( Rationalnumber l, Rationalnumber r );
friend Rationalnumber operator/( Rationalnumber l, Rationalnumber r );
friend std::istream &operator>>( std::istream &is, Rationalnumber &r );
friend std::ostream &operator<<( std::ostream &os, Rationalnumber r );
int num, denom; // implementation
// MY MEMBERS
// functions
static int gcd(int n, int d); // for the gcd function
static void zeroDenom(); // is called whenever denom = 0
// variables
// object stats:
// The first four statistics vary depending on the implementation approach
static void gcdStatsCounter();
static int gcdStats;//• calls to gcd
static int con; //• rational-number objects created by regular constructors
static int copy; //• rational-number objects created by copy constructor
static int des; //• rational-number objects destroyed by destructor
//operation stats:
// must be consistent across implementations
static int assn; //• assignments to rational-number objects
static int rel; //• relational/equality operations between rational-number objects
static int add; //• addition/subtraction operations between rational-number objects
static int sub;
static int mul; //• multiplication/division operations between rational-number objects
static int div;
static int in; //• input/output operations on rational-number objects
static int out;
public: // interface routines
Rationalnumber();
Rationalnumber( int n );
Rationalnumber( int n, int d );
Rationalnumber( const Rationalnumber &c ); // copy constructor
~Rationalnumber();
int numerator() const; // return numerator
int numerator( int n ); // set numerator to n; return previous numerator
int denominator() const; // return denominator
int denominator( int d ); // set denominator to d; return previous denominator
Rationalnumber operator-(); // unary negation
Rationalnumber &operator=( const Rationalnumber &r ); // assignment
static void statistics(); // print statistics
}; // Rationalnumber
#endif // __RATIONALNUMBER_H__
UPDATE :: SEE TOP