小编Sha*_*ley的帖子

sqlite3_open - 检查文件是否为sqlite3数据库的问题

我是第一次使用sqlite3,并且在打开文件之前无法正确检查文件.到目前为止,sqlite总是在任何文件上返回OK.

此外,文件名是从GTK文件选择器返回的变量.它返回一个绝对路径,我猜这不是问题.

谢谢你的帮助.

这是代码的片段:

int rc;
char *filename;
sqlite3 *db;

filename = gtk_file_chooser_get_filename(etc.);

if(SQLITE_OK == rc = sqlite3_open(filename,&db))
{  etc. }
Run Code Online (Sandbox Code Playgroud)

c c++ sqlite

3
推荐指数
1
解决办法
4567
查看次数

将基类的指针转换为继承的类

我正在开发一个小型的roguelike游戏,对于任何不属于地图的对象/"事物"都是基于XEntity类.有几个依赖它的类,例如XPlayer,XItem和XMonster.

我的问题是,当我知道对象在项目中时,我想将指针从XEntity转换为XItem.我用来拿取物品的示例代码就是这样,当一个不同的实体拿起它所站立的物品时.

void XEntity::PickupItem()
{
    XEntity *Ent = MapList; // Start of a linked list

    while(true)
    {
        if(Ent == NULL) { break; }

        if(Ent->Flags & ENT_ITEM)
        {
            Ent->RemoveEntity(); // Unlink from the map's linked list

            XItem *Item = Ent // Problem is here, type-safety

            // Code to link into inventory is here

            break;
        }

        Ent = Ent->MapList;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是在XEntity中创建一个方法,它将自身作为XItem指针返回,但它创建了无法解析的循环依赖项.

我对这个很难过.任何帮助是极大的赞赏.

c++ oop pointers class type-safety

3
推荐指数
1
解决办法
404
查看次数

C++继承的模板类和初始化列表

我一直在将一些数学类转换为模板并使用初始化列表,并在继承的类需要在初始化时访问基类数据成员时遇到问题.

这是代码:

template <typename T>
struct xCoord2
{
    T x;
    T y;

    xCoord2(T _x, T _y) : x(_x), y(_y) {};
};

template <typename T>
struct xCoord3 : xCoord2<T>
{
    typedef xCoord2<T> B;

    T z;

    // All Error
    xCoord3(T _x, T _y, T _z) : x(_x), y(_y), z(_z) {};
    xCoord3(T _x, T _y, T _z) : B::x(_x), B::y(_y), z(_z) {};
    xCoord3(T _x, T _y, T _z) : this->x(_x), this->y(_y), z(_z) {};

    // Works
    xCoord3(T _x, T _y, T _z) { B::x …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance templates initialization-list

3
推荐指数
1
解决办法
1711
查看次数

添加到向量后,在析构函数内部双重释放

嘿,我正在打鼓机,我遇到了矢量问题.

每个序列都有一个样本列表,样本按向量排序.但是,当样本是向量上的push_back时,将调用样本的析构函数,并导致双重自由错误.

这是示例创建代码:

class XSample
{
  public:
    Uint8 Repeat;
    Uint8 PlayCount;
    Uint16 Beats;
    Uint16 *Beat;
    Uint16 BeatsPerMinute;

    XSample(Uint16 NewBeats,Uint16 NewBPM,Uint8 NewRepeat);
    ~XSample();

    void GenerateSample();

    void PlaySample();
};

XSample::XSample(Uint16 NewBeats,Uint16 NewBPM,Uint8 NewRepeat)
{
    Beats = NewBeats;
    BeatsPerMinute = NewBPM;
    Repeat = NewRepeat-1;
    PlayCount = 0;

    printf("XSample Construction\n");
    Beat = new Uint16[Beats];
}

XSample::~XSample()
{
    printf("XSample Destruction\n");
    delete [] Beat;
}
Run Code Online (Sandbox Code Playgroud)

以及在向量中创建每个样本的'Dynamo'代码:

class XDynamo
{
  public:
    std::vector<XSample> Samples;

    void CreateSample(Uint16 NewBeats,Uint16 NewBPM,Uint8 NewRepeat);
};

void XDynamo::CreateSample(Uint16 NewBeats,Uint16 NewBPM,Uint8 NewRepeat)
{
    Samples.push_back(XSample(NewBeats,NewBPM,NewRepeat));
} …
Run Code Online (Sandbox Code Playgroud)

c++ destructor vector double-free

2
推荐指数
1
解决办法
3662
查看次数

C++ Double Dispatch问题

这是我之前提出的问题的第2部分:是否有可能在C++中使用多态成员重载?

使用Wiki示例我创建了这个示例. http://en.wikipedia.org/wiki/Double_dispatch

我的问题是编译后的代码永远不会查找vtable,并且总是使用base而不是继承的类.这是我的代码:

#include <iostream>

class xEntity;
class xVehicle;

class xMapObject
{
  public:
    virtual void Bump(xMapObject&) { std::cout << "MapObject Bump MapObject\n"; };
    virtual void Bump(xEntity&) { std::cout << "MapObject Bump Entity\n"; };
    virtual void Bump(xVehicle&) { std::cout << "MapObject Bump Vehicle\n"; };
};

class xEntity : public xMapObject
{
  public:
    virtual void Bump(xMapObject&) { std::cout << "Entity Bump MapObject\n"; };
    virtual void Bump(xEntity&) { std::cout << "Entity Bump Entity\n"; };
    virtual void Bump(xVehicle&) { std::cout << "Entity …
Run Code Online (Sandbox Code Playgroud)

c++ double-dispatch

2
推荐指数
1
解决办法
441
查看次数

使用结构作为STL映射键的要求?

我正在使用带有struct密钥的STL地图.这是地图的定义: std::map<Coord2<uint8_t>, MapTile> tile_;

定义struct:

template <typename T>
struct Coord2
{
    T x;
    T y;

    bool operator<(const Coord2<T> &coord) const { return (x < coord.x || y < coord.y); }
    bool operator>(const Coord2<T> &coord) const { return (x > coord.x || y > coord.y); }
}
Run Code Online (Sandbox Code Playgroud)

我会因为比较而遇到地图问题吗?

c++ stl map

2
推荐指数
2
解决办法
1551
查看次数

C++继承的模板类无权访问基类

我是第一次使用模板类,并试图找出编译器在使用inheritence时似乎不喜欢的原因.

这是代码:

template <typename T>
struct xPoint2
{
    T x;
    T y;

    xPoint2() { x = 0; y = 0; };
};

template <typename T>
struct xVector2 : xPoint2<T>
{
    xVector2() { x = 0; y = 0; };
};
Run Code Online (Sandbox Code Playgroud)

编译器输出:

vector2.hh: In constructor ‘xVector2<T>::xVector2()’:
vector2.hh:11: error: ‘x’ was not declared in this scope
vector2.hh:11: error: ‘y’ was not declared in this scope
Run Code Online (Sandbox Code Playgroud)

是不是可以这样使用模板?

谢谢

c++ inheritance templates

1
推荐指数
1
解决办法
1991
查看次数

在删除条目时,std ::指针列表变为无效

我有一个指针列表,它们引用了需要转向我游戏的时间对象.此示例TimeObject*在列表中有两个.此代码有效,直到从列表中删除某个项目:当发生这种情况时,另一个项目指向无效的地址.TimeObject发生这种情况时都不会被删除; 只有指针从列表中删除.是什么造成的?

TimeUnlink()被称为TimeObject::Tick().它不是静态的,但列表是.

我在Linux上使用GCC 4.6.2.该程序没有线程.

void TimeObject::TimeUnlink()
{
    printf("Time unlink\n");

    TimeObject::list_.remove(this);

    timeobject_flags_.linked_ = 0;
}

void GameTime::GameTurn(uint16_t _time)
{
    tick_ += _time;

    for(std::list<TimeObject*>::iterator it = TimeObject::list_.begin(); it != TimeObject::list_.end(); ++it)
    {
        TimeObject *timeobject = *it;

        printf("GameTurn %p\n", timeobject);

        if(timeobject == NULL) { printf("continue\n"); continue; }

        timeobject->time_ += _time;

        if(timeobject->speed_ && timeobject->time_ >= timeobject->speed_)
        {
            while(timeobject->timeobject_flags_.linked_ && timeobject->time_ - timeobject->speed_ > 0)
            {
                timeobject->time_ -= timeobject->speed_;

                if(timeobject->mapobject_)
                {
                    timeobject->mapobject_->Tick();
                }
            }
        }
    }
} …
Run Code Online (Sandbox Code Playgroud)

c++ pointers segmentation-fault stdlist

1
推荐指数
1
解决办法
342
查看次数

从 3d 中的起点和角度计算一条线

我在 3D 空间中有一个点和两个角度,我想根据这些信息计算结果线。我已经找到了如何用 2D 线来做到这一点,但不是 3D。如何计算?

如果有帮助:我正在使用 C++ 和 OpenGL 并且有用户点击鼠标的位置和相机的角度,我想跟踪这条线的交叉点。

c++ math geometry trigonometry

0
推荐指数
1
解决办法
3269
查看次数