Так что по какой-то причине при попытке добавить переменную «стек» к классу (общедоступному или частному) в этом многоклассном проекте это вызовет ошибку времени выполнения:
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
или
terminate called after throwing an instance of 'std::length_error'
what(): deque::_M_new_elements_at_front
или
Segmentation fault (Core Dumped)
Кажется, это зависит от типа стека, который я пытаюсь добавить.
Я закомментировал все методы (в.cpp и .h) за исключением конструктора, и вещи, которые я пытаюсь добавить, нигде не упоминаются, но всегда выдают ошибку. Странно то, что у меня уже есть стек, который отлично работает, хранится как общедоступный, я просто не могу больше добавлять.
Из Main.cpp:
int main(int, char* argv[])
{
Scanner funScanner = Scanner(argv[1]);
DatalogProgram funProgram = DatalogProgram(funScanner.tokenize());
}
Из моей DatalogProgram.h file:
class DatalogProgram
{
public:
DatalogProgram(stack <Token> tokensFromScanner);
stack <Token> tokenStack; //<-- this one seems to work fine
private:
stack <Predicate> schemes;
stack <Predicate> facts;
stack <Rule> rules; //These 4 stacks are based on other classes, but even the int stack gives a similar error
stack <Predicate> queries;
stack <int> testStack; //<-- this stack also gives a run-time error
};
Есть идеи, почему это может быть сделано?
ОБНОВЛЕНИЕ: я запускал файл своего проекта через make-файл, поэтому я попытался запустить его без него,и я получил еще одну ошибку,
terminate called after throwing an instance of 'std::logic_error'
what(): basic_string::_M_construct NULL not valid
После поиска этой ошибки, похоже, что должна быть строка, установленная в нулевой указатель, поэтому я в настоящее время ищу это.