gpt4 book ai didi

c++ - 多重声明错误-虚函数

转载 作者:行者123 更新时间:2023-11-28 08:24:14 24 4
gpt4 key购买 nike

我有 observer.h 、 client.h 和 field.h 文件。

在 observer.h 中有 Subject 类有

// observer.h

class Subject {
public:
virtual ~Subject(){};
Subject(){};
virtual void Attach(Observer*);
virtual void Detach(Observer*);
virtual void Notify(bool _value);
virtual bool getCheckedIn(){};
private:
vector < Observer* > _observers;
};

#ifndef CLIENT_H
#define CLIENT_H

#include "Field.h"

class Client : public Subject {
public:
Client(string _name, Field *_field) : client_name(_name) ,field(_field) , checked_in(false) {}

void setCheckedIn(bool _value){
checked_in = _value;
Notify(_value);
}

void enterRow(string _row_name){
field->deneme();
setCheckedIn(true);
}

bool getCheckedIn(){ return checked_in;}
private:
bool checked_in;
string client_name;

Field *field;

};

#endif // CLIENT_H

#ifndef Field_H
#define Field_H
#include "CreateRow_absFac.h"
#include "observer_pattern.h"
#include <vector>
#include <string>
using namespace std;

// Template Class
class Field{
public:
Field();
// Template method
void field_creator();
virtual void setAbstractRow() = 0;
protected:
FarmFactory *abstract_row1;
FarmFactory *abstract_row2;
FarmFactory *abstract_row3;

Rows *row1 ;
Rows *row2 ;
Rows *row3 ;
Sensor sensor1;
};

编译时出现错误:

ld:/Users/barisatamer/Desktop/se311/PROJECT/build/PROJECT.build/Debug/PROJECT.build/Objects-normal/x86_64/Field.o 和/Users 中的重复符号 Subject::Notify(bool)/barisatamer/Desktop/se311/PROJECT/build/PROJECT.build/Debug/PROJECT.build/Objects-normal/x86_64/main.o

如果我删除虚函数,它编译时不会出错。虚函数有什么问题?

最佳答案

我们在这里实际上看不到它,但问题可能是您在头文件中定义了 Subject::notify(bool)(您的 observer.h 只是声明了它,它没有' t 定义它)并且您将该头文件包含在 Field.cpp 和 main.cpp 中,因此您可以获得多个定义。解决方法是将定义移动到源文件中,使其只定义一次。

一般规则——在头文件中声明事物,在非头文件中定义它们。请注意,包含守卫在这里无关紧要——它们可以防止在单个编译单元中多次声明某些内容,但需要避免在不同的编译单元中多次定义某些内容。

关于c++ - 多重声明错误-虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4618901/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com