Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

26.04.2013, 15:44

Fehlender Typspezifizierer beim Kompilieren / C++

Hey hab ein Fehler in meinem Quelltext an dem ich mir echt den Kopf zerbrech jegliche Fehler vermutung verliefen im Sand . Naja jetzt müsst ihr erfahrenen programmierer halt ran ;). Bitte nehmt mich nicht zu sehr außeinnader, ich habe garde erst das Buch von Heiko durchgearbeitet und dieses war mein erstes Projekt, aber falls ihr verbesserungsvorschläge habt nehme ich sie gerne an, aber denkt daran das ich wirklich nur grundlagen besitze. Am wichtigsten wäre mir das dieser Fehler verschwindet also konzentriert euch bitte darauf. Damit ich den Thread nicht überflute poste ich nur die betroffene Datei. Kurz zur Funktion ich versuche die Breite, Höhe sowie den Zustand der jeweiligen Position (0 = Keinblock und >= 1 ein Block) als int in einem Vector in einer externen Datei zu speichern um dieses quasi als lvl zu benutzen. Wohl nicht optimal aber was effizienteres viel mir nicht ein ;) dabei ist pos 0 breite und pos 1 höhe. Hab das so gemacht weil ich später noch einen kleinen level editor einfügen möchte. Naja diese Funkltion install sollte vorerst nur einen Test level (Level0) für meine Lade funktion erstellen aber da hab ich mir ein Bein gestellt. Vielen Dank für die Hilfe.

LG Darwin

Header

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#ifndef INSTALL_HPP
#define INSTALL_HPP

#include <iostream>
#include <fstream>
#include <string>
#include <vector>

class CInstall
{
public:

    void InstallLevel();
    
private:

    string m_LevelName;             //String für den Namen des Levels
    vector<int> m_vBlockPos;        //Vekrotr für die Block Positionen
};
#endif


CPP

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include "Install.hpp"

void CInstall::InstallLevel()
{
    //Breite des Levels
    m_vBlockPos.push_back(17);

    //Höhe des Levels
    m_vBlockPos.push_back(17);

    //for Schleife für die anzahl der felder durchlaufen
    for (int i = 0; i >= m_vBlockPos.at(0) * m_vBlockPos.at(1); i++)
    {
        if (i % 5 == 0)
        {
            m_vBlockPos.push_back(1);
        }
        else
        {
            m_vBlockPos.push_back(0);
        }
    };

    //Datei erstellen falls sie noch nicht exzestiert
    ofstream Output ("Data/Level0.lvl", ios::binary);
    Output.write ((char*) &m_vBlockPos, sizeof(m_vBlockPos));

}


Fehler:
error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'm_LevelName'
error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
error C2143: Syntaxfehler: Es fehlt ';' vor '<'
error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
error C2238: Unerwartete(s) Token vor ';'

birdfreeyahoo

Alter Hase

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

2

26.04.2013, 16:02

über

C-/C++-Quelltext

1
class CInstall

bitte

C-/C++-Quelltext

1
using namespace std;


einfügen. Das dürfte das Problem lösen.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

26.04.2013, 16:14

using namespace ist in einem Header unbedingt zu vermeiden, siehe auch [C++] Auf Includes in Header zugreifen. Einfach std::string und std::vector schreiben...

4

26.04.2013, 17:30

Hey danke bin jetzt erstmal leider nicht mehr zuhause, aber ich werde das dann mal ausprobieren die std:: deklarition finde ich sehr interessant werde ich mir merken. ( das nutzt dann wohl die std namespace nur für die zeile) danke auf jeden fall schonmal, super schnelle hilfe

#written on my iphone

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »D4rwin« (27.04.2013, 16:11)


5

27.04.2013, 16:11

Gut hab das jetzt auspobiert, aber jetzt kommt dieser Fehler für Vector:

error C2955: "std::vector": Für die Verwendung der template-Klasse ist eine template-Argumentliste erforderlich.


Header

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#ifndef INSTALL_HPP
#define INSTALL_HPP

#include <iostream>
#include <fstream>
#include <string>
#include <vector>

class CInstall
{
public:

    void InstallLevel();
    
private:

    std::string m_LevelName;                    //String für den Namen des Levels
    std::vector<int> m_vBlockPos;           //Vekrotr für die Block Positionen
};
#endif


mit <int> hab ich doch die template argumentliste oder bin ich jetzt völlig deppert ;)

6

27.04.2013, 16:23

Sicher, dass der Fehler in diesem Codeausschnitt liegt?

Wie auch immer, Output.write ((char*) &m_vBlockPos, sizeof(m_vBlockPos)); tut garantiert nicht das, was du erwartest, das es tut.
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

7

27.04.2013, 17:07

ja das ist mir leider aufgefallen ;), wie auch immer habt statt der std:: varinate using namespace std; eingefügt und jetzt geht der teil, würde mich nur interessieren ob es eine bessere variante gibt.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

27.04.2013, 19:52

Sagte dot es nicht schon?

using namespace ist in einem Header unbedingt zu vermeiden, siehe auch [C++] Auf Includes in Header zugreifen. Einfach std::string und std::vector schreiben...
Wenn Du ohne das "using" im Header Probleme hast, dann deswegen, weil Du es in einer anderen Datei vergessen hast, die den Header inkludiert.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige