Probleme beim zugriff auf Std namespace Funktionen in Klassenbibiothek



  • Hallo zusammen.

    Ich hab mal wieder ein kleines Problem.
    Ich erstelle grade eine kleine Klassenbibiothek mit Objekten und Funktionen, die ich in mehren Projekten gebrauchen könnte.

    Aktuell arbeite ich aus Übungszwecken an einer vollständigen String-Klasse.
    Ich weiß, das es bereist die std::string klasse gibt, die auch bestimmt besser ist als diese, jedoch übe ich so das C++ Programmieren. In meinem C++ Buch wird ebenso eine solche klasse erstellt. (Aus Übungszwecken)

    So nun zum Problem.

    Der Konstruktor sieht so aus

    #include "main.h"
    #include <cstring>
    
    STRING::STRING(const char	*S):
    Length{ std::strlen(S) },			// Länge des Strings eintragen
    p_Str{new char[Length + 1]}			// String initialisierne [string + \0 byte]
    {
    
    	std::strcpy(p_Str, S);			// String Kopieren
    
    }
    

    Die Klasse sieht von der Deklaration so aus

    class FW_API STRING
    {
    public:
    	STRING(const char	*S);
    	~STRING();
    
    private:
    
    	char	*p_Str;			//String Array;
    	size_t	Length;		// Länge des Strings
    };
    

    Die Dateien mit der Deklaration und Definietion sind durch die Hauptdatei ("Main") verknüpft.

    Das Problem ist, das ich auf die Funktionen std::strlen und std::strcpy nicht zugreifen kann.

    Der Compiler sagt das die Funktionen nicht im Namensraum definiert sind.
    Egal ob mit oder ohne (std:: ). Ich habe doch alle notwendigen Dateien eingebunden.

    Wichtig ist, das das eine Klassenbibliothek ist und keine gewöhnliches Projekt.

    Ich benutzte "Visual Studio Professional"

    Danke im Voraus.



  • Da fällt mir nichts direkt ein. Jeder Deiner Header hat include-guards?



  • Was ist main.h?
    Welcher Compiler?
    Wie lautet die Fehlermeldung genau? Kopieren!



  • Auf jeden Fall ist die Reihenfolge der Initialisierung im K'tor falsch. Die tatsächliche Reihenfolge richtet sich nach der Reihenfolge der Deklaration in der Klasse. D.h. p_str wird mit einer undefinierten Länge erzeugt.


Log in to reply