我在一个对象中有一个坐标QVector(我的类型),我想转移到另一个Vector(我验证并且想要使用ist)。
标题
bool getVector(QVector<Coordinates> &getCoordinates );
C档
static QVector<Coordinates> current;
int getVector( QVector<Coordinates> &getCoordinates)
{
.... stuff ...
getCoordinates = current;
.... stuff ....
return 0;
}
我用它就像
....
QVector<Coordinates> currentCoordinates;
getVector(currentCoordinates);
currentCoordinates.X // CRASH
调试器转到此行发生Live Crash
inline QVector(const QVector<T> &v) : d(v.d) { d->ref.ref(); if (!d->sharable) detach_helper(); }
所以我该如何解决这个问题?因为我可以使用它来获得所有其他变量与此方法。
答案 0 :(得分:0)
问题的一个可能原因是在current
被调用之前尚未构建getVector
。在C ++中初始化静态对象是一个棘手的领域,也是错误的常见来源 - 有关更多信息,请参阅this question和the static initialization order fiasco FAQ entry。
此问题的一个简单解决方案是通过函数提供对current
的访问,即替换
static QVector<Coordinates> current;
与
static QVector<Coordinates>& getCurrent()
{
static QVector<Coordinates> current;
return current;
}
但请注意,上面写的函数不是线程安全的。如果多个线程可能会调用getCurrent
,则应使用QMutex
保护它。
答案 1 :(得分:0)
对于gareth和论坛:
标题:
typedef QVector<Coordinates> VesselCoordinates;
bool (*getVessel)(Charakter forCharakter, Vessel& getVessel,VesselCoordinates &getCoordinates );
稍后我将tis函数指针绑定到静态函数(因为我的程序的这部分将是一天转换为c)
cpp文件下层:
static struct {
Charakter currentPlayerVessel;
VesselCoordinates possibility;
}data;
static bool getVessel(Charakter forCharakter, Vessel& getVessel,VesselCoordinates &getCoordinates );
// funktion to bind the funktion pointer to this static funktion so it can be called outside the File
static bool serverNamespace::getVessel(Charakter forCharakter, Vessel& getVessel,VesselCoordinates &getCoordinates )
{
bool retValue= false;
if ( forCharakter == data.currentPlayerVessel){
// TODO abfragen ob die Adresse regestriert ist!
if ((true == minSize()) and ((true == shipsInRow())or (true == shipsInLine())))
{
retValue = true;
Vessel test = (Vessel)data.possibility.size();
getVessel = test;
getCoordinates = data.possibility;
}
}
return retValue;
}
然后我可以在上层cpp文件中使用它来获取我需要的信息:
// in an Funktion :
VesselCoordinates currentCoordinates;
currentCoordinates.clear();
Vessel currentVessel;
if (true == basicFleet->getVessel(currentCharakter,currentVessel, currentCoordinates ))
// doing stuff to it
所以它很好,但你的想法同样合适。也许你可以看出为什么我的想法也有效。
谢谢
Elektor的