C++ ';运营商苹果&x27;包含标头时不是可识别的运算符或类型
我会把它缩短 我有两门课:C++ ';运营商苹果&x27;包含标头时不是可识别的运算符或类型,c++,visual-c++,operator-overloading,C++,Visual C++,Operator Overloading,我会把它缩短 我有两门课:Apple和Orange,如下所示: #ifndef APPLE_H_ #define APPLE_H_ #include "Orange.h" class Apple {}; #endif /* APPLE_H_ */ Apple.h(Apple.c为空) Orange.h: #ifndef ORANGE_H_ #define ORANGE_H_ #include "Apple.h" class Orange { public: Orange();
Apple
和Orange
,如下所示:
#ifndef APPLE_H_
#define APPLE_H_
#include "Orange.h"
class Apple {};
#endif /* APPLE_H_ */
Apple.h
(Apple.c
为空)
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”不是一个可识别的运算符或类型
错误
详情如下:
#ifndef APPLE_H_
#define APPLE_H_
#include "Orange.h"
class Apple {};
#endif /* APPLE_H_ */
#include“Orange.h”
造成了什么问题?这是因为您现在有一个循环依赖: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
头文件。循环包含是问题所在。实际上,该代码应该可以工作,Orange.cpp
包括Orange.h
,其中包括Apple.h
,但不包括Orange.h
,因为Orange\u h\u\u已经定义,或者我错了吗?您需要在Orange.h
中向前声明Apple
:类Apple代码>@filmor没有预处理器错误。这完全是错误的。如果Apple.h
包含Orange.h
,Orange.h
将再次尝试包含Apple.h
(但由于Apple\u\u\u
保护,它将不起任何作用),您将得到Orange
类定义,该类定义在声明Apple
Apple
之前引用Apple
类型。@filmorah,我明白你的意思。是的,也许有什么事情是OP没有告诉我们的。(不管怎样,循环的#include
仍然是个坏主意。)不完全是这样,但我用你的技巧找到了一个解决办法。谢谢我会等待更多的答案——不会的,我会把你的标记为最好的。谢谢