std::list NullReferenceException

Also

Code:
this->registry = new list<LexValue *>();

lässt sich kompilieren.

Aber "this" ist ein nicht definierter Wert. "registry" liegt außerhalb des gültigen Bereichs. Allerdings hat "this" im Konstruktor schon einen Wert. Also muss das ja unterwegs irgendwo verloren gehen.
 
Zuletzt bearbeitet:
Ich glaube, es hat mit meiner flex-Datei zu tun. Von dort aus fülle ich nämlich die Liste.

Kann es sein, dass lex_value_factory

Code:
yylval.lex_value = lex_value_factory->createLexValue(yytext, tok_DO, yylineno, inputcol);

in meiner flex-Datei nicht gültig ist?

Ich erstelle in der anaqueryparser.cpp eine neue Instanz:

Code:
#include "stdafx.h"

#define YYPARSE_RETURN_TYPE   ANAqueryParser::t_error_code

extern FILE *yyin;

void ANAqueryParser::setInput(){
	//
	// read query string from file into standard input
	//
	fopen_s(&yyin, TMP_QUERY_STRING_FILE, "r");
}

ANAqueryParser::t_error_code ANAqueryParser::process(){
	lex_value_factory = LexValueFactory::getInstance();
	return yyparse();
}

ANAqueryParser::~ANAqueryParser(){
	fclose(yyin);
}

Und rufe dann Parser und implizit Scanner auf. Gibt es lex_value_factory dort nicht? Er kennt die Variable schon, weil sie ja in der stdafx.h deklariert ist. Aber ist Speicher reserviert?
 
Die Variable lex_value_factory sollte natürlich als extern in der stdafx.h deklariert werden, und nimm mal das "static" bei der Definition weg:
C++:
static LexValueFactory *lex_value_factory = 0;
Gruß
 
Das war ein guter Tipp...
Ich habe jetzt die Deklaration
Code:
LexValueFactory *lex_value_factory = 0;
in meine anaqueryparser.h gepackt - ohne static.
Dann kann ich nämlich in der anaqueryscanner.l einen extern-Verweis auf diese Variable machen. Und schau da, es funktioniert!
Ich hoffe, ich habe nicht zu dolle genervt. Aber so weit haben meine C++ Kenntnisse bisher noch nicht gereicht...
Danke!

Gruß Tobian.
 
Zurück