我会做空。
我有两个课程:Apple
和Orange
,如下所示:
Apple.h
(Apple.c
为空)
#ifndef APPLE_H_
#define APPLE_H_
class Apple {};
#endif /* APPLE_H_ */
Orange.h
:
#ifndef ORANGE_H_
#define ORANGE_H_
#include "Apple.h"
class Orange {
public:
Orange();
virtual ~Orange();
operator Apple ();
};
#endif /* ORANGE_H_ */
Orange.cpp
:
#include "Orange.h"
Orange::Orange() {
// TODO Auto-generated constructor stub
}
Orange::~Orange() {
// TODO Auto-generated destructor stub
}
Orange::operator Apple() {
Apple y;
return y;
}
因为这些都很有效。
但是当我向#include "Orange.h"
添加Apple.h
时,我收到'operator Apple' is not a recognized operator or type
错误。
如下:
#ifndef APPLE_H_
#define APPLE_H_
#include "Orange.h"
class Apple {};
#endif /* APPLE_H_ */
#include "Orange.h"
会产生什么问题?
答案 0 :(得分:1)
这是因为你现在有一个循环依赖:Orange.h
取决于Apple.h
,这取决于Orange.h
等。
在Orange.h
头文件中,声明Apple
类可能就足够了:
// Tell the compiler that there is a class named `Apple`
class Apple;
class Orange {
public:
Orange();
virtual ~Orange();
operator Apple ();
};
然后在Orange.cpp
源文件中包含Apple.h
头文件。