Map.h:
#pragma once
struct block;
namespace th
{
class Map
{
public:
Map(std::string mapLocation);
~Map(void);
void closeFile();
void loadFile(std::string fileLocation);
void newMap(std::string locationOfNewMap, std::vector<std::vector<block>> newValues);
std::vector<std::vector<block>> convertToBlocks();
std::vector<std::vector<block>> tiledMap();
private:
std::ifstream mapFile;
std::vector<std::vector<int>> mapInIntegers;
std::vector<std::vector<block>> mapInBlocks;
};
}
Map.cpp:
#include "StdAfx.h"
#include "Map.h"
th::Map::Map(std::string mapLocation)
{
mapFile.open(mapLocation);
//Setting The Map's Size
int lIndexSize, rIndexSize;
mapFile >> lIndexSize;
mapFile >> rIndexSize;
mapInIntegers.resize(lIndexSize);
for (int index = 0; index < lIndexSize; ++index)
{
mapInIntegers[index].resize(rIndexSize);
}
//Loading The Map
int currentPosition = 2;
int currentValue = 0;
for(int lindex = 0; lindex < mapInIntegers.size(); ++lindex)
{
for(int rindex = 0; rindex < mapInIntegers[lindex].size(); ++rindex)
{
++currentPosition;
mapFile >> currentValue;
mapInIntegers[lindex][rindex] = currentValue;
}
}
convertToBlocks();
}
th::Map::~Map(void)
{
}
std::vector<std::vector<block>> th::Map::convertToBlocks()
{
mapInBlocks.resize(mapInIntegers.size());
for(unsigned int lindex = 0; lindex < mapInBlocks.size(); ++lindex)
{
mapInBlocks[lindex].resize(mapInIntegers[lindex].size());
}
for(unsigned int lindex = 0; lindex < mapInIntegers.size(); ++lindex)
{
for(unsigned int rindex = 0; rindex < mapInIntegers[rindex].size(); ++rindex)
{
switch (mapInIntegers[rindex][lindex])
{
case 0:
mapInBlocks[lindex][rindex].type = (blockType)0;
case 1:
mapInBlocks[lindex][rindex].type = (blockType)1;
}
}
}
return mapInBlocks;
}
void th::Map::closeFile()
{
mapFile.close();
}
void th::Map::loadFile(std::string locationOfNewMap)
{
mapFile.open(locationOfNewMap);
}
void th::Map::newMap(std::string locationOfNewMap, std::vector<std::vector<block>> newValues)
{
std::ofstream newFile;
newFile.open(locationOfNewMap);
if(newFile.good())
{
newFile << newValues.size();
newFile << " ";
newFile << newValues[0].size();
for(unsigned int lindex = 0; lindex < newValues.size(); ++lindex)
{
newFile << "/n";
for(unsigned int rindex = 0; rindex < newValues[lindex].size(); ++rindex)
{
newFile << newValues[lindex][rindex].type << " ";
}
}
}
}
std::vector<std::vector<block>> th::Map::tiledMap()
{
return mapInBlocks;
}
The error comes up right here:
std::vector<std::vector<block>> th::Map::convertToBlocks()
{
mapInBlocks.resize(mapInIntegers.size());
for(unsigned int lindex = 0; lindex < mapInBlocks.size(); ++lindex)
{
mapInBlocks[lindex].resize(mapInIntegers[lindex].size());
}
/*After running through the first for loop below once, it returns:
Vector Subscript Out Of Range the second time :0!*/
for(unsigned int lindex = 0; lindex < mapInIntegers.size(); ++lindex)
{
for(unsigned int rindex = 0; rindex < mapInIntegers[rindex].size(); ++rindex)
{
switch (mapInIntegers[rindex][lindex])
{
case 0:
mapInBlocks[lindex][rindex].type = (blockType)0;
case 1:
mapInBlocks[lindex][rindex].type = (blockType)1;
}
}
}
return mapInBlocks;
}
As I detail in the comment, in the latter code it loops through the for loop once before giving me the error. All help is appreciated. And if it's any consolation, here's what the file looks like:
File:
1 1
1
All help is appreciated !