I made a for loop in the constructor that goes through XML elements of bricks and creates the brick depending on what the Id is.
I even checked typeid in case mId wasnt a char but it's const char*. The std::cout << "Made it in"; never triggers. Here is the code:
Brick::Brick(int rowSpacing, int columnSpacing, const char* Id, SDL_Renderer* renderer)
{
mDoc = new XMLDocument();
mDoc->LoadFile("Breakout.xml");
// Go through every "BrickType" element in the XML file
dataElement = mDoc->FirstChildElement("Level")->FirstChildElement("BrickTypes");
for (XMLElement* brickElement = dataElement->FirstChildElement("BrickType");
brickElement != NULL; brickElement = brickElement->NextSiblingElement())
{
std::cout << typeid(brickElement->FirstChildElement("Id")->GetText()).name();
std::cout << typeid(Id).name();
if (brickElement->FirstChildElement("Id")->GetText() == Id) {
std::cout << "Made it in";
mId = brickElement->FirstChildElement("Id")->GetText();
std::stringstream hp(brickElement->FirstChildElement("HitPoints")->GetText());
hp >> mHitPoints;
std::stringstream bs(brickElement->FirstChildElement("BreakScore")->GetText());
bs >> mBreakScore;
mTexture = IMG_LoadTexture(renderer, brickElement->FirstChildElement("Texture")->GetText());
}
}
mCurrentHp = mHitPoints;
mIsHit = false;
rect = { rowSpacing, columnSpacing, mBrickWidth, mBrickHeight };
}
Instead of the Id in if (brickElement->FirstChildElement("Id")->GetText() == Id) i tried hard coding "S" as one of the brick Ids is "S", like this if (brickElement->FirstChildElement("Id")->GetText() == "S"), but it still doesn't want to get into an if condition, I don't understand why.
C Strings are character arrays and not first-class datatypes in C++ (is C as it happens(. As such you cannot use comparison operators on them. Semantically you are comparing the value of two pointers, not the content of two strings.
To that end, you either need a C-String comparison:
or use the C++
std::stringcomparison:The std::string class overloaded the
==operator (and others) so that it compares the content. Constructing astd::stringjust to perform a comparison is somewhat heavyweight, but in other circumstances, you might do well to usestd::stringin preference to C-Strings in any case.