包含标题时,'operator Apple'不是公认的运算符或类型

时间:2013-04-15 10:16:57

标签: c++ visual-c++ operator-overloading

我会做空。

我有两个课程:AppleOrange,如下所示:

Apple.hApple.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"会产生什么问题?

1 个答案:

答案 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头文件。