Извините заранее за разлив кода ниже. Первое размещение, поэтому я хочу быть тщательным.
Я экспериментирую с существующим, работающим XML синтаксическим анализатором, написанным на C ++, путем перемещения переменных и методов из main в класс с именем XMLParser. Моя цель - немного очистить код, чтобы облегчить дальнейшее обслуживание.
После перемещения переменных и методов я получаю следующую ошибку, в частности, после перемещения объявления буфера из main
в XMLParser.hpp
":
/[build directory]/XMLParser.hpp:37:30: error: ‘BUFFER_SIZE’ is not a type
std::vector<char> buffer(BUFFER_SIZE);
buffer
- это контейнер std :: vector, размер которого объявлен const int BUFFER_SIZE
. BUFFER_SIZE
объявлен и инициализирован в refillBuffer.hpp
. Анализатор работает без проблем когда buffer
объявлен в main
, но не XMLParser.hpp
. В чем разница между доступом к BUFFER_SIZE
в refillBuffer
из main
и из XMLParser.hpp
, который вызывает ошибку в программе, как это? проблема с областью в XMLParser.hpp
, которая не позволяет видеть BUFFER_SIZE
?
main. cpp:
#include "refillBuffer.hpp"
#include "XMLParser.hpp"
int main() {
XMLParser parser;
// std::vector<char> buffer(BUFFER_SIZE);
// auto pc = buffer.cend();
while (true) {
// parse XML using methods and variables in parser
}
// print report here
return 0;
}
XMLParser.hpp
#ifndef INCLUDE_XMLPARSER_HPP
#define INCLUDE_XMLPARSER_HPP
#include "refillBuffer.hpp"
#include <vector>
#include <errno.h>
#include <stdlib.h>
#include <algorithm>
#include <cstring>
#include <iostream>
class XMLParser {
public:
int textsize = 0;
int loc = 0;
int expr_count = 0;
int function_count = 0;
int class_count = 0;
int file_count = 0;
int decl_count = 0;
int comment_count = 0;
int return_count = 0;
int literal_string_count = 0;
int block_comment_count = 0;
int depth = 0;
long total = 0;
bool intag = false;
std::vector<char> buffer(BUFFER_SIZE);
auto pc = buffer.cend();
// methods using above variables go here
};
#endif
refillBuffer. hpp
#ifndef INCLUDE_REFILLBUFFER_HPP
#define INCLUDE_REFILLBUFFER_HPP
#include <vector>
#include <iterator>
const int BUFFER_SIZE = 16 * 4096;
// Refill the buffer preserving the unused data
std::vector<char>::const_iterator refillBuffer(std::vector<char>::const_iterator pc, std::vector<char>& buffer, long& total);
#endif
'''