Hallo Zusammen,
ich habe ein Spiel programmiert um C++ zu lernen und in meiner anfänglichen Version ging noch alles. Nun habe ich ein paar Dinge geändert um ein Hauptmenu etc...(also verschiedene GameStates) hinzuzufügen.
Das Spiel ist ein Clon von CurveFever, wie gesagt, um C++ zu lernen.
Jetzt bekomme ich immer den "error C2065: "PowerUp": nichtdeklarierter Bezeichner" Fehler. Eigentlich kein Ding, aber ich kann meinen Fehler einfach nicht finden und hocke nun schon seit einer Woche dran - bin hart am verzweifeln.
Ich nehme an es liegt an meiner falschen Anwendung der #include Direktive.
Bitte nicht erschrecken, es sind viele Dateien - ich hoffe Ihr könnt mir helfen und ich etwas dazulernen!
Der Fehler:
1>c:\users\vinc\documents\visual studio 2017\projects\curvefever4\curvefever4\playstate.h(27): error C2065: "PowerUp": nichtdeklarierter Bezeichner
1>c:\users\vinc\documents\visual studio 2017\projects\curvefever4\curvefever4\playstate.h(27): error C2923: "std::vector": "PowerUp" ist kein gültiges Vorlage-Typargument für den _Ty-Parameter.
1>c:\users\vinc\documents\visual studio 2017\projects\curvefever4\curvefever4\playstate.h(27): error C3203: "allocator" : Klasse Vorlage (nicht spezialisiert) kann nicht als Vorlage-Argument für den Vorlage-Parameter "_Alloc" verwendet werden, ein realer Typ wurde erwartet.
1>c:\users\vinc\documents\visual studio 2017\projects\curvefever4\curvefever4\powerup.cpp(15): warning C4244: "Argument": Konvertierung von "int" in "float", möglicher Datenverlust
1>c:\users\vinc\documents\visual studio 2017\projects\curvefever4\curvefever4\powerup.cpp(39): warning C4244: "+=": Konvertierung von "sf::Int64" in "int", möglicher Datenverlust
1>Player.cpp
1>c:\users\vinc\documents\visual studio 2017\projects\curvefever4\curvefever4\playstate.h(26): error C2065: "Player": nichtdeklarierter Bezeichner
1>c:\users\vinc\documents\visual studio 2017\projects\curvefever4\curvefever4\playstate.h(26): error C2923: "std::vector": "Player" ist kein gültiges Vorlage-Typargument für den _Ty-Parameter.
1>c:\users\vinc\documents\visual studio 2017\projects\curvefever4\curvefever4\playstate.h(26): error C3203: "allocator" : Klasse Vorlage (nicht spezialisiert) kann nicht als Vorlage-Argument für den Vorlage-Parameter "_Alloc" verwendet werden, ein realer Typ wurde erwartet.
1>c:\users\vinc\documents\visual studio 2017\projects\curvefever4\curvefever4\player.cpp(17): warning C4244: "Argument": Konvertierung von "int" in "float", möglicher Datenverlust
1>c:\users\vinc\documents\visual studio 2017\projects\curvefever4\curvefever4\player.cpp(32): warning C4244: "=": Konvertierung von "double" in "float", möglicher Datenverlust
Der Code:
Ok..das sind jetzt mal die PlayState.h /cpp und PowerUp.h/cpp
bei Bedarf kann ich auch den restlichen Code posten.
ich habe ein Spiel programmiert um C++ zu lernen und in meiner anfänglichen Version ging noch alles. Nun habe ich ein paar Dinge geändert um ein Hauptmenu etc...(also verschiedene GameStates) hinzuzufügen.
Das Spiel ist ein Clon von CurveFever, wie gesagt, um C++ zu lernen.
Jetzt bekomme ich immer den "error C2065: "PowerUp": nichtdeklarierter Bezeichner" Fehler. Eigentlich kein Ding, aber ich kann meinen Fehler einfach nicht finden und hocke nun schon seit einer Woche dran - bin hart am verzweifeln.
Ich nehme an es liegt an meiner falschen Anwendung der #include Direktive.
Bitte nicht erschrecken, es sind viele Dateien - ich hoffe Ihr könnt mir helfen und ich etwas dazulernen!
Der Fehler:
1>c:\users\vinc\documents\visual studio 2017\projects\curvefever4\curvefever4\playstate.h(27): error C2065: "PowerUp": nichtdeklarierter Bezeichner
1>c:\users\vinc\documents\visual studio 2017\projects\curvefever4\curvefever4\playstate.h(27): error C2923: "std::vector": "PowerUp" ist kein gültiges Vorlage-Typargument für den _Ty-Parameter.
1>c:\users\vinc\documents\visual studio 2017\projects\curvefever4\curvefever4\playstate.h(27): error C3203: "allocator" : Klasse Vorlage (nicht spezialisiert) kann nicht als Vorlage-Argument für den Vorlage-Parameter "_Alloc" verwendet werden, ein realer Typ wurde erwartet.
1>c:\users\vinc\documents\visual studio 2017\projects\curvefever4\curvefever4\powerup.cpp(15): warning C4244: "Argument": Konvertierung von "int" in "float", möglicher Datenverlust
1>c:\users\vinc\documents\visual studio 2017\projects\curvefever4\curvefever4\powerup.cpp(39): warning C4244: "+=": Konvertierung von "sf::Int64" in "int", möglicher Datenverlust
1>Player.cpp
1>c:\users\vinc\documents\visual studio 2017\projects\curvefever4\curvefever4\playstate.h(26): error C2065: "Player": nichtdeklarierter Bezeichner
1>c:\users\vinc\documents\visual studio 2017\projects\curvefever4\curvefever4\playstate.h(26): error C2923: "std::vector": "Player" ist kein gültiges Vorlage-Typargument für den _Ty-Parameter.
1>c:\users\vinc\documents\visual studio 2017\projects\curvefever4\curvefever4\playstate.h(26): error C3203: "allocator" : Klasse Vorlage (nicht spezialisiert) kann nicht als Vorlage-Argument für den Vorlage-Parameter "_Alloc" verwendet werden, ein realer Typ wurde erwartet.
1>c:\users\vinc\documents\visual studio 2017\projects\curvefever4\curvefever4\player.cpp(17): warning C4244: "Argument": Konvertierung von "int" in "float", möglicher Datenverlust
1>c:\users\vinc\documents\visual studio 2017\projects\curvefever4\curvefever4\player.cpp(32): warning C4244: "=": Konvertierung von "double" in "float", möglicher Datenverlust
Der Code:
Code:
//PlayState.h
#pragma once
#include <iostream>
#include<SFML\Graphics.hpp>
#include <SFML\System\Vector2.hpp>
#include <SFML\OpenGL.hpp>
//#include "Gamestate.h"
#include "Game.h"
#include "eV.h"
//#include <vector>
#include "PowerUp.h"
#include "Player.h"
#define _USE_MATH_DEFINES
#include <math.h>
#include <cmath>
class PlayState : public Gamestate
{
public:
PlayState();
~PlayState();
void HandleEvents(Game& game);
void Update(Game& game);
void Draw(Game& game);
void HandlePowerups();
std::vector<Player> players;
std::vector<PowerUp> powerups;
private:
sf::Font font;
sf::Text playtxt;
int width, height,k;
float elapsedTime, pTime, pTime2;
float speed;
std::vector<sf::Color> C;
std::vector<sf::Keyboard::Key> K;
sf::Texture speedmintxt;
sf::Texture speedmaxtxt;
sf::Texture dicktxt;
sf::Texture duenntxt;
sf::Clock clock;
sf::RectangleShape rectsplit;
};
Code:
//PlayState.cpp
#pragma once
#include "PlayState.h"
int score=0;
PlayState::PlayState()
{
width = 600;
height = 600;
pTime = 0;
pTime2 = 0;
k = 0;
//setup
speedmintxt.loadFromFile("speedmintxt.png");
speedmaxtxt.loadFromFile("speedmaxtxt.png");
dicktxt.loadFromFile("dicktxt.png");
duenntxt.loadFromFile("duenntxt.png");
speed = 0.0015;
C.resize(4);
C[0] = sf::Color::Blue;
C[1] = sf::Color::Red;
C[2] = sf::Color::Green;
C[3] = sf::Color::Yellow;
K.resize(8);
K[0] = sf::Keyboard::Right;
K[1] = sf::Keyboard::S;
K[2] = sf::Keyboard::V;
K[3] = sf::Keyboard::Num2;
K[4] = sf::Keyboard::Left;
K[5] = sf::Keyboard::A;
K[6] = sf::Keyboard::B;
K[7] = sf::Keyboard::Num3;
for (int i = 0; i < Number; i++)
{
sf::Vector2<int> x(rand() % width, rand() % height);
Player nP(C[i], x, K[i], K[i + 4]);
players.push_back(nP);
}
}
void PlayState::HandleEvents(Game& game)
{
elapsedTime = clock.restart().asMicroseconds();
pTime += elapsedTime;
pTime2 += elapsedTime;
sf::Event event;
while (game.window.pollEvent(event))
{
switch (event.type)
{
case sf::Event::Closed:
game.window.close();
game.running = false;
break;
case sf::Event::KeyPressed:
if (event.key.code == sf::Keyboard::Escape)
{
game.ChangeState(Game::gameStates::MAINMENU);
}
break;
}
}
}
void PlayState::HandlePowerups()
{
//powerups spawnen
if (pTime2 > 4000000)
{
int z = rand() % 4;
if (z == 0)
{
PowerUp Pow(speedmintxt, 0,5000000);
powerups.push_back(Pow);
}
else if (z == 1)
{
PowerUp Pow(speedmaxtxt, 1,5000000);
powerups.push_back(Pow);
}
else if (z == 2)
{
PowerUp Pow(dicktxt, 2, 5000000);
powerups.push_back(Pow);
}
else if (z == 3)
{
PowerUp Pow(duenntxt, 3, 5000000);
powerups.push_back(Pow);
}
pTime2 = 0;
}
//check PowerUp Time
for (int i = 0; i < powerups.size(); i++)
{
int m = powerups[i].Time();
if(m==1)
powerups.erase(powerups.begin() + i);
}
}
void PlayState::Update(Game& game)
{
HandlePowerups();
for (int i = 0; i < players.size(); i++)
{
players[i].Update(game, elapsedTime);
}
}
void PlayState::Draw(Game& game)
{
for (int i = 0; i < players.size(); i++)
{
players[i].Draw(game);
}
for (int i = 0; i < powerups.size(); i++) {
powerups[i].Render(game);
}
rectsplit.setSize(sf::Vector2f(5, height));
rectsplit.setPosition(sf::Vector2f(width - 200, 0));
rectsplit.setFillColor(sf::Color(220,220,220));
game.window.draw(rectsplit);
game.window.display();
}
PlayState::~PlayState()
{
std::cout << "GameScreen destruktor wurde aufgerufen" << std::endl;
}
Code:
//PowerUp.h
#pragma once
#include <iostream>
#include <SFML/Graphics.hpp>
#include "Game.h"
class PowerUp
{
public:
PowerUp(sf::Texture &a, int type, int lifetime);
int Type();
int Eaten(sf::Vector2f x);
void Render(Game& game);
int Time();
private:
int type2, lifetime2;
sf::Texture textur;
sf::Sprite sprite;
bool Active;
int eT;
sf::Clock clock;
};
Code:
//PowerUp.cpp
#pragma once
#include "PowerUp.h"
PowerUp::PowerUp(sf::Texture &a, int type, int lifetime)
{
lifetime2 = lifetime;
type2 = type;
sprite.setTexture(a);
eT = 0;
clock.restart().asMicroseconds();
if (type == 0 || type == 1 || type==2 ||type==3)
{
sprite.setOrigin(300, 300);
sprite.scale(.05f, .05f);
sprite.setPosition(rand() % 741, rand() % 535);
}
}
int PowerUp::Type()
{
return type2;
}
int PowerUp::Eaten(sf::Vector2f x)
{
if (sprite.getGlobalBounds().contains(x))
{
return type2;
}
else
{
return -1;
}
}
int PowerUp::Time()
{
eT += clock.restart().asMicroseconds();
if (eT > lifetime2)
{
return 1;
}
else
{
return 0;
}
}
void PowerUp::Render(Game& game)
{
game.window.draw(sprite);
}
Ok..das sind jetzt mal die PlayState.h /cpp und PowerUp.h/cpp
bei Bedarf kann ich auch den restlichen Code posten.