0

我遇到了这种情况,我觉得很棘手。我有 2 节课:time12 和 time24,它们分别维持 12 小时和 24 小时的时间。它们都应该具有单独的转换函数来处理到另一种类型的转换。但是如果我先声明时间12,那么转换函数原型中的“time24”将是未定义的,因为time24类将在后面声明。那我现在该怎么办?我什至不能只在里面声明它并在第二堂课之后定义它。那么现在怎么办?

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++ 中你有 2 种类型的文件,.h 和 .cpp。您的 .h 文件是您的声明,而 .cpp 是您的定义。

例子:

转换时间.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_

转换时间.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,则没有这样的问题 - 其他类型只需要在执行时知道,当调用转换方法时 - 而不是在 parse ( compile) time - 所以下面的代码是有效的:

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 回答