• Hallo Besucher!

    Du bist neu im Forum? Dann registriere dich hier, um Diskussionen beizutreten oder eigene Themen zu erstellen. Für die Registrierung ist es erforderlich, dass du einen Spielaccount bei Die Stämme hast.

    Andernfalls kannst du dich hier direkt einloggen.

    Falls du dein Passwort vergessen hast, kannst du hier ein neues Passwort anfordern.

C++ - Error: stray '\303' bzw. '\274'

  • Themenstarter DeletedUser82294
  • Startdatum

DeletedUser82294

Gast
Hi, ich hoffe mir kann jemand helfen...

Ich habe ein Problem bei meinem C++ Programm.
Ich bekomme folgende meldungen wenn ich es compilieren möchte:
Code:
/home/fabian/Cpp/Database/data.h|13|error: stray ‘\303’ in program|
/home/fabian/Cpp/Database/data.h|13|error: stray ‘\274’ in program|
/home/fabian/Cpp/Database/Data.cpp|7|error: stray ‘\303’ in program|
/home/fabian/Cpp/Database/Data.cpp|7|error: stray ‘\274’ in program|
/home/fabian/Cpp/Database/Data.cpp|11|error: stray ‘\303’ in program|
/home/fabian/Cpp/Database/Data.cpp|11|error: stray ‘\274’ in program|
/home/fabian/Cpp/Database/data.h|7|error: ‘string’ does not name a type|
/home/fabian/Cpp/Database/data.h|13|error: ‘string’ has not been declared|
/home/fabian/Cpp/Database/data.h|13|error: expected ‘,’ or ‘...’ before ‘ssel’|
/home/fabian/Cpp/Database/Data.cpp|4|error: expected unqualified-id before ‘using’|
/home/fabian/Cpp/Database/Data.cpp|7|instantiated from here|
/home/fabian/Cpp/Database/data.h|8|error: ‘data<T>::dataset’ has incomplete type|
/home/fabian/Cpp/Database/Data.cpp|7|error: forward declaration of ‘struct T’|
/home/fabian/Cpp/Database/Data.cpp|7|error: ‘unsigned int data<T>::find’ is not a static member of ‘class data<T>’|
/home/fabian/Cpp/Database/Data.cpp|7|error: ‘string’ was not declared in this scope|
/home/fabian/Cpp/Database/Data.cpp|8|error: expected ‘;’ before ‘{’ token|
||=== Build finished: 15 errors, 0 warnings ===|

Die entsprechenden Dateien sehen so aus:

PHP:
//data.cpp

#include <string>
#include "data.h"

using namespace std;

template <>
unsigned int data<class T>::find(string schlüssel)
{
    for(int i=0; i<(sizeof(key)/sizeof(key[0])); i++)
    {
        unsigned int pos = key[i].find(schlüssel)
        if (pos!=0)
        {
            return(pos);
        }
    };
};
PHP:
//data.h

#include <string>

template <class T>
class data
{
    private:
        string key[];
        T dataset[];

    public:
        data();
        ~data();
        unsigned int find(string schlüssel);
        T operator[](unsigned int pos);
}


wenn ihr noch weitere informationen braucht, meldet euch einfach ;-)

mfg fabi545
 

DeletedUser

Gast
Was die stray-Fehler angeht: Umlaute sind im Code nicht erlaubt.
Sind aber noch n paar andere Fehler drin:
In data.h muss es std::string statt string heißen, und Arrays kann man in C++ nicht so deklarieren, wie du das tust. (string key[];) Die Länge muss immer angegeben sein, es sei denn, es wird direkt bei der Deklaration initialisiert. Wenn du die Größe noch nicht kennst, machs dynamisch mit new [] oder benutz lieber gleich n std::vector.
Deinem Konstruktor und dem Destruktor fehlt übrigens die Implementation. Wenn sie nichts tun sollen, lass sie einfach komplett weg. Die werden dann automatisch vom Compiler generiert.
Am Ende der Klassendefinition von data fehlt außerdem noch das Semikolon.

Die Definition
Code:
template <>
unsigned int data<class T>::find(string schluessel)
{
    //...
}
ist auch falsch, müsste so aussehen:
Code:
template<class T>
unsigned int data<T>::find(string schluessel)
{
    //...
}
Und noch ne Frage: wozu ist die if-Abfrage gegen pos!=0 gut? Darf das nich an erster Stelle stehen oder wie? Tipp: string::npos wird zurückgeliefert, wenns nicht gefunden wurde. Nicht 0.
 
Zuletzt bearbeitet von einem Moderator:

DeletedUser82294

Gast
danke jetzt funktioniert alles :)

(muss erst mal wieder richtig in c++ reinkommen)
 

DeletedUser82294

Gast
und schon das nächste Problem...

hier meine aktuellen codes:
PHP:
//main.cpp
#include <iostream>
#include "data.h"
#include <string>
using namespace std;

int main()
{
    datastruct<string> array[2]={{"abc", "def"}, {"ghi", "jkl"}};
    data<string> test(sizeof(array)/sizeof(array[0]), array);
    cout<<test.find("h");
}
PHP:
//data.h
#include <string>

template<class T>
struct datastruct
{
    std::string key;
    T content;
};

template <class T>
class data
{
    private:
        datastruct<T> *dataset;
    public:
        data(unsigned int num, datastruct<T>*);
        ~data();
        int find(std::string schluessel);
        T operator[](unsigned int pos);
};
PHP:
//Data.cpp
#include <string>
#include "data.h"

using namespace std;

template<class T>
data<T>::data(unsigned int num=0, datastruct<T> daten*=0)
{
    dataset = new datastruct<T>[num];
    for (int i=0; i<num; i++)
    {
        dataset[i]=daten[i];
    }
};


template<class T>
data<T>::~data()
{
    delete dataset;
}


template<class T>
int data<T>::find(string schluessel)
{
    for(int i=0; i<(sizeof(dataset)/sizeof(dataset[0])); i++)
    {
        int pos = dataset[i].key.find(schluessel);
        if (pos!=string::npos)
        {
            return(pos);
        }
        else
        {
            return(-1);
        }
    };
};

und die fehlermeldungen:
Code:
obj/Debug/main.o||In function `main':|
/home/fabian/Cpp/Database/main.cpp|9|undefined reference to `data<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >::data(unsigned int, datastruct<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >*)'|
/home/fabian/Cpp/Database/main.cpp|10|undefined reference to `data<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >::find(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'|
/home/fabian/Cpp/Database/main.cpp|10|undefined reference to `data<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >::~data()'|
/home/fabian/Cpp/Database/main.cpp|10|undefined reference to `data<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >::~data()'|
||=== Build finished: 4 errors, 0 warnings ===|

hoffe ihr könnt mir wieder helfen;-)
 

DeletedUser

Gast
Ah, vorhin gar nicht dran gedacht, dass du mit templates hantierst. Bei denen ist die Trennung von Header und Source nicht möglich (=> pack den kompletten Source in die Headerdatei). Die Gründe erspar ich dir mal, dazu braucht man halbwegs Kenntnisse im Compilerbau. Übrigens ist dein Destruktor falsch. delete dataset ist undefiniertes Verhalten, dataset muss mit delete[] freigegeben werden, weil der Speicher mit new[] angefordert wurde.
Code:
~data()
{
    delete []dataset;
}
Wäre richtig.
Und nicht vergessen, Kopierkonstruktor und Zuweisungsoperator zu implementieren, sonst kommts leicht zu ner doppelten Löschung bei Kopien. Oder du nimmst wie vorhin schon von mir vorgeschlagen std::vector, dann musst du dich überhaupt nicht drum kümmern. Wobei das hier sogar so aussieht, als würdest du was nachbauen, was es schon gibt, schau dir mal std::map an. Vllt. tut das ja schon das, was du willst.
 

DeletedUser82294

Gast
Ah, vorhin gar nicht dran gedacht, dass du mit templates hantierst. Bei denen ist die Trennung von Header und Source nicht möglich (=> pack den kompletten Source in die Headerdatei). Die Gründe erspar ich dir mal, dazu braucht man halbwegs Kenntnisse im Compilerbau. Übrigens ist dein Destruktor falsch. delete dataset ist undefiniertes Verhalten, dataset muss mit delete[] freigegeben werden, weil der Speicher mit new[] angefordert wurde.
Code:
~data()
{
    delete []dataset;
}
Wäre richtig.
Und nicht vergessen, Kopierkonstruktor und Zuweisungsoperator zu implementieren, sonst kommts leicht zu ner doppelten Löschung bei Kopien. Oder du nimmst wie vorhin schon von mir vorgeschlagen std::vector, dann musst du dich überhaupt nicht drum kümmern. Wobei das hier sogar so aussieht, als würdest du was nachbauen, was es schon gibt, schau dir mal std::map an. Vllt. tut das ja schon das, was du willst.
ich weiß, das das ähnlich ist wie map.
aber ich brauche für mein programm noch einige funktionen, die ich nicht so leicht in ein bestehendes system einbringen kann.
 
Oben