したがって、これは私の main / Initializer 関数の縮小版です。それを呼び出して、プレーヤーの発明者にアイテムを追加する必要がある場合、Debug Assertation Failed エラーが発生します。
スコープを多少混同しているように思えますか?
関数のスコープ内で何か新しいことを宣言していて、メインで再びアクセスできないのでしょうか?
割り当ての代わりにゲッター/セッターを使用するなど、関数内でいくつかのことを試しましたがp_player = p
、実際には問題をまったく処理していないと思います。混乱しています。
int main()
{
Array<Item> items(3);
string itemsfilename = "itemsfile.txt";
Initializer::InitializeItems(items, itemsfilename);
Login login;
Player p1;
string filename = login.LoginToGame();
Initializer::InitializePlayer(p1, rooms, items, 3, filename);
}
void Initializer::InitializePlayer(Player& p_player, HashTable<string, Room>& p_rooms, Array<Item>& p_items, int p_numItems, std::string& p_filename)
{
ifstream playerfile(p_filename);
int inventorycount = 0;
//all the stuff needed to make a player
std::string name;
int health;
int confidence;
int humor;
int speed;
std::string room;
Room* currentRoom;
Inventory inventory(100);
//reading in values from file
for(int i = 0; i < inventorycount; i++)
{
playerfile.getline(value, 256);
std::string item(value);
for(int j = 0; j < p_numItems; j++)
{
if(p_items[j].GetName() == item)
{
inventory.AddItem(&(p_items[j])); //This line taken out, removes the error.
}
}
}
Player p(name, health, confidence, humor, speed, currentRoom, inventory);
p_player = p;
}
AddItem() はアイテムへのポインターを取り、それをその DLinkedList に追加します。
編集:
エラーは
Debug Assertation Failed! です。
プログラム: zzz
ファイル f:\dd/vctools/crt_bld/self_x86/crt/src/dbgdel.cpp 行: 52
式: _Block_TYPE_IS_VALID(pHead->nBlockUse)
AddItem() コード:
bool AddItem(Item* p_item)
{
if(p_item->GetWeight() + m_weight <= m_maxWeight)
{
m_inventory.Append(p_item);
m_weight += p_item->GetWeight();
}
else
{
return false;
}
return true;
}