クラス Event とサブクラス ServerEvent がありますが、Event クラスは ServerEvent が拡張/継承するための単なるインターフェイスです。make を実行すると、Event.o が生成されず、存在しないというエラーが表示されます。
このインターフェイスをコンパイルする正しい方法と、makefile に追加するものは何ですか? また、私が保護されたコンストラクターを持っている理由は、Event をインスタンス化できないようにするためです。仮想コンストラクターを使用できませんでした。継承の通常の方法は何ですか?
編集: makefile、ServerEvent.cpp、コンパイル エラーを含む
Event.h
#ifndef EVENT_H
#define EVENT_H
#include <string>
#define EVENT_STOP 0
#define EVENT_START 1
class Event {
private:
protected:
double time;
std::string label;
int type; // EVENT_START OR EVENT_STOP
Event();
public:
};
#endif
ServerEvent.h
#ifndef SERVEREVENT_H
#define SERVEREVENT_H
#include "Event.h"
#include <vector>
class ServerEvent: public Event {
private:
public:
ServerEvent(std::vector<std::string> tokens);
};
#endif
ServerEvent.cpp
#include "Event.h"
#include "ServerEvent.h"
#include <cstdlib>
#include <sstream>
ServerEvent::ServerEvent(std::vector<std::string> tokens) {
std::stringstream stream(tokens[0]);
stream >> time;
}
メイクファイル
OBJ = correngine.o CSVManager.o CorrelationEngineManager.o ServerEvent.o
CC = g++
CFLAGS = -c -Wall -pedantic
LFLAGS = -Wall -pedantic
EXE = correngine
correngine : $(OBJ)
$(CC) $(LFLAGS) $(OBJ) -o $(EXE)
correngine.o : correngine.cpp correngine.h CSVManager.h
$(CC) $(CFLAGS) correngine.cpp
CSVManager.o : CSVManager.cpp CSVManager.h
$(CC) $(CFLAGS) CSVManager.cpp
CorrelationEngineManager.o : CorrelationEngineManager.cpp CorrelationEngineManager.h Event.o
$(CC) $(CFLAGS) CorrelationEngineManager.cpp
Event.o : Event.h
$(CC) $(CFLAGS) Event.h
ServerEvent.o: ServerEvent.cpp ServerEvent.h Event.h
$(CC) $(CFLAGS) ServerEvent.cpp
clean :
\rm *.o $(EXE)
コンパイルエラー
ServerEvent.o: In function `ServerEvent::ServerEvent(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >)':
ServerEvent.cpp:(.text+0x11): undefined reference to `Event::Event()'
ServerEvent.o: In function `ServerEvent::ServerEvent(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >)':
ServerEvent.cpp:(.text+0xe1): undefined reference to `Event::Event()'
collect2: ld returned 1 exit status
make: *** [correngine] Error 1