我遇到过这种情况,我觉得很棘手。我有2个类:time12和time24,分别维持12小时和24小时的时间。它们都应该具有单独的转换函数来处理到另一种类型的转换。但是如果我先声明时间12,那么转换函数原型中的“time24”将是未定义的,因为稍后将声明time24类。那我现在该怎么办?我甚至不能在里面声明它并在第二节之后定义它。那么现在呢?
class time12
{
operator time24() //time24 is undefined at this stage
{
}
};
class time24
{
};
答案 0 :(得分:2)
您可以在不使用C ++定义类的情况下声明该类:
class time24;
class time12
{
operator time24() //time24 is undefined at this stage
{
}
};
class time24
{
};
答案 1 :(得分:1)
通常在c ++中你有两种类型的文件,.h和.cpp。您的.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
}
答案 2 :(得分: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
{ ... }
不知道其他静态类型语言的工作原理。