私のプログラムでは、以下の目的を持っていますウェイズ抽出演算子を使用する(>>)
- 派生クラスで基本クラスの抽出演算子をオーバーロードするには:私は
static_cast<Derived> (derived)
を使ってこれを試みたが、実行時エラーに終わった。私は友人が継承されないことを知っています。私は、派生クラスのfriend関数を再宣言し、派生クラスのデータメンバーを扱うための異なる引数を使用しました。 - 静的データメンバーを処理するには静的データメンバーの値を変更する必要があります。私はそれらを静的でないデータメンバーと組み合わせて使用する必要があります。静的ゲッタとセッタを使ってみました。しかし、成功することはできませんでした。ここで
以下の私のコードです:
#include <iostream>
using namespace std;
class Base {
private:
string name;
int rollNum;
public:
friend std::istream& operator>>(std::istream& in, Base &base);
};
std::istream& operator>>(std::istream& in, Base &base) {
string name;
int rollNum;
cout << "Enter name: ";
in >> base.name;
cout << "Enter roll no: ";
in >> base.rollNum;
return in;
}
class Derived : public Base {
private:
int myNumOne;
static int x;
static int y;
public:
friend std::istream& operator>>(std::istream& in, Derived Derived);
void add();
static void init();
static int getX();
static int getY();
};
std::istream& operator>>(std::istream & in, Derived derived) {
in >> static_cast<Derived> (derived);
cout << "Enter a number: ";
in >> derived.myNumOne;
return in;
}
static void Derived::init() {
x = 100;
y = 100;
}
static int Derived::getX() {
return x;
}
static int Derived::getY() {
return y;
}
void Derived::add() {
myNumOne += getX() + getY();
cout << "Number = " << myNumOne << endl;
}
int main() {
Derived obj;
cin>>obj;
Derived objOne;
objOne.add();
Derived objTwo;
objTwo.add();
return 0;
}
次のように私はエラーを取得しています:
newmain.cpp:43:31: error: cannot declare member function 'static void Derived::init()' to have static linkage [-fpermissive] static void Derived::init() { ^ newmain.cpp:48:30: error: cannot declare member function 'static int Derived::getX()' to have static linkage [-fpermissive] static int Derived::getX() { ^ newmain.cpp:52:30: error: cannot declare member function 'static int Derived::getY()' to have static linkage [-fpermissive] static int Derived::getY() { ^
関数定義の前にある 'static'を削除します。 –
getX()、getY()、init()メソッドで '未定義の参照:: Derived :: x'を取得しました。 –
'Derived :: x'と' Derived :: y'の定義を提供する必要があります。 –