私はobserver.h、client.h、およびfield.hファイルを持っています。複数の宣言エラー - 仮想関数
:observer.hでコンパイルすると
// 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;
};
を持っている件名クラスがあり、このエラーを得ました0
ld:重複するシンボルSubject :: Notify(bool)in /Users/barisatamer/Desktop/se311/PROJECT/build/PROJECT.build/Debug/PROJECT.build/Objects-normal/x86_64/Field.oおよび/ Users /仮想関数を削除するとエラーなしでコンパイルされます。仮想関数の問題は何ですか?
observer.hファイルにインクルードガードがありますか? – vdsf
投稿したコードには実際に問題の原因が含まれていません。たいていの場合、ヘッダーファイルに 'Notify'を非インラインで定義しましたが、あなたが投稿したコードにはありません。あなたの 'Notify'の定義を投稿してください。それはどこにある? – AnT