Изначально я построил парсер monolithi c, используя xerces c ++, и в основном у меня есть много функций стиля C.
В конце концов, я переместил logi c в объекты и начал рефакторинг ...
Тип DOMNode разрешается и компилируется в main. c, но не в классе ниже:
#ifndef DATAFILE_H
#define DATAFILE_H
#include <cstdlib>
#include <iostream>
#include <string>
#include <xercesc/dom/DOMNode.hpp>
#define data_file_local_identifier "file"
using namespace std;
class DataFile {
public:
//NOTE:** here all objects are responsible for their own parsing
DataFile* parsePDS4(DOMNode* node);
DataFile();
DataFile(const string& fileName, const string& fullFilepath, const string& localIdentifier);
DataFile(const DataFile& orig);
virtual ~DataFile();
/*TODO: move to private & create setters & getters & destroy const */
void setFileName(const string& fileName);
const string* getFileName();
void setFullFilePath(const string& fullFilePath);
const string* getFullFilePath();
void setLocalIdentifies(const string& _local_identifier);
const string* getLocalIndentifier();
private:
string* _file_name;
string* _full_file_path;
string* _local_identifier;
};
Я подумал, что это синтаксическая ошибка, поэтому переписал ее несколько раз, но это не тот случай. Я фактически использовал строку вместо DOMNode DataFile* parsePDS4(DOMNode* node); to DataFile* parsePDS4(string* node);
, чтобы исключить синтаксическую ошибку в другой строке, и класс скомпилирован, поэтому DOMNode не разрешается.
Ниже мой Makefile:
CXX = g++
CFLAGS = -std=c99 -Wall -fPIC
CXXFLAGS = -std=c++11 -Wall -pedantic -fpermissive
#executable
EXE = spar
#release flags
RELEASE_PROGRAM = dist/Debug/GNU-Linux/
DEBUG_PROGRAM = dist/Debug/GNU-Linux/
#source files
SOURCES_CC = $(wildcard *.cpp) $(wildcard *.c)
#object files
OBJS = $(SOURCES_C:%.c=%.o) $(SOURCES_CC:%.cpp=%.o)
#libraries
LIBS = -I/usr/lib/jvm/java-1.8.0-openjdk/include -I/usr/lib/jvm/java-1.8.0-openjdk/include/linux -I/usr/include/python2.7 -I/usr/include -include PDS4Header.h -include DataFile.h -include FieldDataValue.h -include FieldDelimited.h -include FileObservational.h -include TableDelimited.h -include RecordDelimited.h -L/usr/include -lxerces-c
#targets
all: $(RELEASE_PROGRAM)$(EXE)
%.o : %.cpp
$(CXX) -c $(CXXFLAGS) $<
$(RELEASE_PROGRAM)$(EXE): $(OBJS)
$(CXX) -o $@ $(OBJS) $(LIBS)
clean:
rm -rf $(RELEASE_PROGRAM) $(OBJS)
rm -rf $(DEBUG_PROGRAM) $(OBJS)
mkdir $(RELEASE_PROGRAM)
mkdir -p $(DEBUG_PROGRAM)
Компилятор выдает ошибку:
In file included from DataFile.cpp:14:0:
DataFile.h:24:15: error: expected ‘;’ at end of member declaration
DataFile* parsePDS4(DOMNode* node);
^
DataFile.h:24:32: error: expected ‘)’ before ‘*’ token
DataFile* parsePDS4(DOMNode* node);
Почему DOMNode.h
найдено в основном. c а не в другом классе / модуле?
Спасибо