Seite 1 von 1

[gelöst] Problem mit std::string

Verfasst: 12. Februar 2010 11:45
von Exasperation
Hallo zusammen!

Ich baue gerade ein Test-Szenario für eine Berkeley DB auf und habe im Moment Probleme mit dem std::string.

Code: Alles auswählen

#include <string.h>

#include "my_db.hpp"

my_db::my_db( std::string &path, std::string db_name ) : db( NULL, 0 ), db_file_name( path, db_name ), open_flags( DB_CREATE )
{
	try
	{
		// Redirect error information to std::cerr
		db.set_error_stream( &std::cerr );

		// Open the database
		db.open( NULL, db_file_name.c_str(), NULL, DB_BTREE, open_flags, 0 );
	}
	catch( DbException &e )
	{
		std::cerr << "Error opening database: " << db_file_name.c_str() << std::endl;
		std::cerr << e.what() << std::endl;
	}
	catch( std::exception &e )
	{
		std::cerr << "Error opening database: " << db_file_name.c_str() << std::endl;
		std::cerr << e.what() << std::endl;
	}
}

my_db::~my_db()
{
	close();
}

void my_db::close()
{
	try
	{
		db.close( 0 );
		std::cout << "database " << db_file_name.c_str() << " is closed." << std::endl;
	}
	catch( DbException &e )
	{
		std::cerr << "Error closing database: " << db_file_name.c_str() << std::endl;
		std::cerr << e.what();
	}
	catch( std::exception &e )
	{
		std::cerr << "Error closing database: " << db_file_name.c_str() << std::endl;
		std::cerr << e.what();
	}
}

int main()
{

	return 0;
}
Mit diesem scheinbar harmlosen Code bekomme ich folgende Fehler:

Code: Alles auswählen

Fehler	1	error C2039: 'iterator_category': Ist kein Element von 'std::basic_string<_Elem,_Traits,_Ax>'	c:\programme\microsoft visual studio 8\vc\include\xutility	610

Fehler	2	error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'iterator_category'	c:\programme\microsoft visual studio 8\vc\include\xutility	610

Fehler	3	error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.	c:\programme\microsoft visual studio 8\vc\include\xutility	610

Fehler	4	error C2602: 'std::iterator_traits<_Iter>::iterator_category' ist kein Element einer Basisklasse von 'std::iterator_traits<_Iter>'	c:\programme\microsoft visual studio 8\vc\include\xutility	610

Fehler	5	error C2868: 'std::iterator_traits<_Iter>::iterator_category': Unzulässige Syntax für using-Deklaration; vollständiger Name erwartet	c:\programme\microsoft visual studio 8\vc\include\xutility	610

Fehler	6	error C2664: 'void std::basic_string<_Elem,_Traits,_Ax>::_Construct<_It>(_It,_It,std::_Int_iterator_tag)': Konvertierung des Parameters 3 von 'int' in 'std::_Int_iterator_tag' nicht möglich	c:\programme\microsoft visual studio 8\vc\include\xstring	681
Der Debugger verweist nur auf die xuitility und xstring... Hat jemand ne Ahnung, an was das liegen könnte? Falsches include?

Verfasst: 12. Februar 2010 12:19
von kater
Das Include ist <string> und nicht <string.h> versuch es mal damit.

Verfasst: 12. Februar 2010 12:23
von Exasperation
Das hatte ich schon versucht, hat leider zum selben Ergebnis geführt... :/

Verfasst: 12. Februar 2010 12:48
von Exasperation
Mit meiner Konzentration isses heut irgendwie nicht so... -.-
War nur ne bescheuerte Unaufmerksamkeit....

Code: Alles auswählen

my_db::my_db( std::string &path, std::string db_name ) : db( NULL, 0 ), db_file_name( path + db_name ), open_flags( DB_CREATE )
{
...
}
Bei db_file_name wollte ich den Pfad zur db zusammenbauen und hab mit , statt + verbunden... War ein bisschen zu sehr "hingeklatscht". Unkonzentriertes Arbeiten tut weh.