0

私はこの状況に遭遇しました。私は本当にトリッキーだと思います。私には2つのクラスがあります:それぞれ12時間と24時間ベースで時間を維持するtime12とtime24。どちらも、他のタイプへの変換を処理するための個別の変換関数を備えているはずです。ただし、最初にtime 12を宣言すると、time24クラスが後で宣言されるため、変換関数のプロトタイプの「time24」は未定義になります。だから私は今何をしますか?私はそれを内部で宣言し、2番目のクラスの後で定義することさえできません。んで、どうする?

class time12
{
 operator time24()  //time24 is undefined at this stage
 {

 }
};

class time24
{

};
4

3 に答える 3

2

C ++で定義せずに、クラスを宣言できます。

class time24;

class time12
{
 operator time24()  //time24 is undefined at this stage
 {

 }
};

class time24
{

};
于 2012-04-15T18:21:26.420 に答える
1

通常、C ++には、.hと.cppの2種類のファイルがあります。.hファイルは宣言であり、.cppは定義です。

例:

convtime.h:

#ifndef CONVTIME_H_ //this is to prevent repeated definition of convtime.h
#define CONVTIME_H_

class time24; //for the operator in class12

class time12
{
public:
    time12(int); //constructor
    operator time24();
private:
    //list your private functions and members here
}

class time24
{
public:
    time24(int); //constructor
private:
    //list your private functions and members here
}

#endif //CONVTIME_H_

convtime.cpp:

#include "convtime.h"

//constructor for time12
time12::time12(int n)
{
    //your code
}

//operator() overload definition for time12
time24 time12::operator()
{
    //your code
}

//constructor for time24
time24::time24(int n)
{
    //your code
}
于 2012-04-16T10:37:15.580 に答える
0

言語を指定していません-Pythonなどの動的型付き言語を扱っている場合、そのような問題はありません-他の型は、変換メソッドが呼び出されたときに実行時にのみ認識される必要があります-解析時ではありません(コンパイル)時間-したがって、次のコードが有効です。

class Time12(Time):
   def toTime24(self):
       return Time24(self._value)

class Time24(Time):
   def toTime12(self):
       return Time12(self._value)

「toTime24」メソッドが呼び出されるまでに、グローバル名「Time24」が適切なクラスとして定義されます。

C ++では、関数プロトタイプとほぼ同じように機能するクラススタブを宣言できます。次のようにします。

class time24;

class time12
{ ... }

class time24
{ ... }

これが他の静的に型付けされた言語でどのように機能するかわからない。

于 2012-04-15T18:24:15.263 に答える