Сторонний тип C ++ разрешается в main. c, но не в другом модуле / классе - PullRequest
0 голосов
/ 19 июня 2020

Изначально я построил парсер 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 а не в другом классе / модуле?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...