Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何调试由类型特征引起的错误?_C++_Sqlite_Memory_Typetraits_Bulletphysics - Fatal编程技术网

C++ 如何调试由类型特征引起的错误?

C++ 如何调试由类型特征引起的错误?,c++,sqlite,memory,typetraits,bulletphysics,C++,Sqlite,Memory,Typetraits,Bulletphysics,我在应用程序中遇到了一个非常奇怪的错误。这是一款视频游戏,可用于其他图书馆 在实现SQLite接口之后,冲突检测变得一团糟。玩家跌入地形,或与看不见的物体碰撞。在我看来,这似乎是一个错误的内存访问。不过,数据库功能运行良好 我已经可以缩小这个问题的范围了。SQLite接口使用不同可存储类型提供的类型特征。当注释掉所有的特质特化时,碰撞可以很好地工作 我怎样才能找到这个错误的原因?请让我知道是否有任何其他信息对解决问题有用,以便我将其纳入问题 更新:这是我需要注释的代码,用于正确的冲突。可存储类型

我在应用程序中遇到了一个非常奇怪的错误。这是一款视频游戏,可用于其他图书馆

在实现SQLite接口之后,冲突检测变得一团糟。玩家跌入地形,或与看不见的物体碰撞。在我看来,这似乎是一个错误的内存访问。不过,数据库功能运行良好

我已经可以缩小这个问题的范围了。SQLite接口使用不同可存储类型提供的类型特征。当注释掉所有的特质特化时,碰撞可以很好地工作

我怎样才能找到这个错误的原因?请让我知道是否有任何其他信息对解决问题有用,以便我将其纳入问题

更新:这是我需要注释的代码,用于正确的冲突。可存储类型为
Person

类型/人/类型.h

类型/人/特点

#pragma一次
#包括“h型”
#包括“manager/data/manager.h”
使用名称空间std;
模板
结构ManagerDataTrait
{
静态常量无序映射字段;
静态void序列化(Person*实例,ManagerData::Serialization*数据)
{
数据->浮动(“高度”,实例->高度);
数据->浮动(“质量”,实例->质量);
}
静态void反序列化(Person*实例,ManagerData::反序列化*数据)
{
实例->高度=数据->浮动(“高度”);
实例->质量=数据->浮动(“质量”);
}
};
类型/个人/通用.cpp

#包括“type.h”
#包括“trait.h”
使用名称空间std;
常量无序_映射ManagerDataTrait::Fields=[]{
无序的地图字段;
字段。插入(std::make_pair(“高度”、“浮动”);
字段。插入(标准::使成对(“质量”、“浮动”);
返回字段;
}();

用户雅克在评论中回答了我的问题

专门化应该在类型旁边可见。出现未定义的行为 如果一个单位看到了,另一个单位没有看到


一次添加一个专门化。每当它失败时,分析您刚才添加的特定内容?您可以提供一个需要注释的代码示例,以便应用程序正常工作,以及使用该代码的代码。@Mat好主意。在我的案例中,我已经设置了一个专门的测试。添加时,错误会发生,否则不会发生。@bolov I更新了问题,以包括code.UB是未定义的行为。如果一个
模板
在一个particukar类型的两个上下文中使用,并且在一个上下文中它可以看到专门化,而在另一个上下文中它看不到,则生成的程序格式不正确,不需要任何诊断消息(如果我记得正确的话)。在我的手机上,所以没有时间和界面来做正确的回答:我鼓励你(或其他任何人)追踪关于这一点的引用,或只是把它写得更漂亮一些
#pragma once
struct Person
{
    float Height, Mass;
    // ...
};
#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");
    }
};
#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;
}();