我是第一次使用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) 我正在开发一个小型的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指针返回,但它创建了无法解析的循环依赖项.
我对这个很难过.任何帮助是极大的赞赏.
我一直在将一些数学类转换为模板并使用初始化列表,并在继承的类需要在初始化时访问基类数据成员时遇到问题.
这是代码:
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) 嘿,我正在打鼓机,我遇到了矢量问题.
每个序列都有一个样本列表,样本按向量排序.但是,当样本是向量上的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) 这是我之前提出的问题的第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) 我正在使用带有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)
我会因为比较而遇到地图问题吗?
我是第一次使用模板类,并试图找出编译器在使用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)
是不是可以这样使用模板?
谢谢
我有一个指针列表,它们引用了需要转向我游戏的时间对象.此示例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) 我在 3D 空间中有一个点和两个角度,我想根据这些信息计算结果线。我已经找到了如何用 2D 线来做到这一点,但不是 3D。如何计算?
如果有帮助:我正在使用 C++ 和 OpenGL 并且有用户点击鼠标的位置和相机的角度,我想跟踪这条线的交叉点。
c++ ×9
inheritance ×2
pointers ×2
templates ×2
c ×1
class ×1
destructor ×1
double-free ×1
geometry ×1
map ×1
math ×1
oop ×1
sqlite ×1
stdlist ×1
stl ×1
trigonometry ×1
type-safety ×1
vector ×1