我的应用程序中遇到了一个非常奇怪的错误。这是一个在其他图书馆中使用Bullet Physics的视频游戏。
实现SQLite接口后,碰撞检测变得混乱。玩家会穿过地形,或与不可见的物体碰撞。对我而言,它看起来像是错误的内存访问。数据库功能可以正常工作。
我已经可以缩小这个问题。 SQLite接口使用由不同的可存储类型提供的类型特征。在评论所有特质专业化时,碰撞工作正常。
如何找到此错误的原因?如果有任何其他信息对解决问题有用,请告诉我,以便我可以将其纳入问题。
更新:这是我需要评论正确冲突的代码。可存储类型为Person
。
类型/人/ type.h
#pragma once
struct Person
{
float Height, Mass;
// ...
};
类型/人/ trait.h
#pragma once
#include "type.h"
#include "manager/data/manager.h"
using namespace std;
template <>
struct ManagerDataTrait<Person>
{
static const unordered_map<string, string> Fields;
static void Serialize(Person *Instance, ManagerData::Serialization *Data)
{
Data->FLOAT("height", Instance->Height);
Data->FLOAT("mass", Instance->Mass);
}
static void Deserialize(Person *Instance, ManagerData::Deserialization *Data)
{
Instance->Height = Data->FLOAT("height");
Instance->Mass = Data->FLOAT("mass");
}
};
类型/人/ general.cpp
#include "type.h"
#include "trait.h"
using namespace std;
const unordered_map<string, string> ManagerDataTrait<Person>::Fields = []{
unordered_map<string, string> fields;
fields.insert(std::make_pair("height", "FLOAT"));
fields.insert(std::make_pair("mass", "FLOAT"));
return fields;
}();
答案 0 :(得分:0)
用户Yakk在评论中回答了我的问题。
专业化应该在类型旁边可见。发生未定义的行为 如果一个单位看到它而另一个单位没有看到它。