我有我的基类Gate,而派生类是AND(XOR等)。我在基类中使用的虚函数用于确定输出,但是当我在AND.h中对其进行原型设计并尝试使用AND.cpp实现它时,我在编译时得到了重定义错误。我确信我已妥善包含所有内容。
门标题
#ifndef GATE_H
#define GATE_H
class Gate{
public:
// various functions etc.
virtual bool output(); // **PROBLEM FUNCTION**
};
#endif
门源
#include "Gate.h"
//*various function declarations but not virtual declaration*
派生类“AND”
#ifndef AND_H_INCLUDED
#define AND_H_INCLUDED
class AND: public Gate{
public:
bool output(bool A, bool B){}
};
#endif // AND_H_INCLUDED
我的IDE在AND.h文件中发生错误
#include "AND.h"
bool AND::output(bool A, bool B){
if (A && B == true){
Out = true;
} else {
Out = false;
}
return Out;
}
在这种情况下,是一个继承的变量。
答案 0 :(得分:3)
您正在AND::output
类定义中定义方法AND
:
bool output(bool A, bool B){} // this is a definition
你在这里重新定义它:
bool AND::output(bool A, bool B){
if (A && B == true){
....
您可以通过将前者更改为声明来解决此问题:
bool output(bool A, bool B);
答案 1 :(得分:2)
您提供了AND::output
的两个定义。标题中的一个是空的,另一个在实现文件中,它不是空的。看起来你的标题应该有:
bool output(bool A, bool B);
请注意,您将无法以多态方式使用这些output
函数,因为它们与Gate
中的声明的参数不同。
答案 2 :(得分:1)
正如已经说过的那样,你定义了两次函数输出:在头文件和cpp模块中。此函数也不是虚函数,因为它的参数数量和类型不会与基类中具有相同名称的虚函数声明一致。
我想补充说明函数可以更简单地定义
bool AND::output(bool A, bool B)
{
return ( Out = A && B );
}