我有两节课,foo和bar.
foo.h #includes bar.h并包含一个std::vector指向bar对象的指针.在运行时期间的某个时刻,bar必须访问指向其他bar对象的指针向量.因此,foo包含一个getBarObjects()返回指针数组的方法.
因此,我foo在bar.h中转发声明.我显然还要转发声明我正在使用的方法 - foo::getBarObjects().当这返回指针数组时bar,我陷入了恶性循环.
我无法转发声明Bar然后只是转发声明getBarObjects(),因为这导致"不允许不完整的类型名称".
foo.h中:
#include "bar.h"
#include <vector>
class foo {
public:
foo();
~foo();
std::vector<bar*> getBarObjects();
private:
std::vector<bar*> barObjects;
}
Run Code Online (Sandbox Code Playgroud)
bar.h:
class foo;
std::vector<bar*> foo::getBarObjects(); // error, doesn't know bar at this point
class bar {
public:
bar(foo *currentFoo);
~bar();
bool dosth();
private:
foo *thisFoo;
}
Run Code Online (Sandbox Code Playgroud)
bar.cpp:
#include "bar.h"
bool bar(foo …Run Code Online (Sandbox Code Playgroud) 我正在研究将植绒算法应用到更大的系统中.OGRE用于渲染,luabind用于能够从LUA,yatta yatta进行通信,这些东西不应该太重要.
我基本上按雷诺'boids-model实现了算法.这意味着,一个Boid(如"群中的一条鱼")根据它在某个半径内的邻居移动.事情就是这样,它的基本复杂性是O(n²),因为如果它们在范围内,每个boid都必须检查所有它们的flockmates,然后考虑一些因素来计算自己的运动.
算法本身实现并运行顺畅.它接受所有不同尺寸的模型,它可以在2D和3D空间中工作,它很好吃,我已经有一段时间了.
我的问题是,当我在boid数字中遇到一种"障碍"时,算法会在运行时崩溃,大约200-250甚至变化.现在,如果它变得越来越慢,直到我被打破到1 fps,我就能理解,算法的简单性能就是问题所在.但是,例如,199 boids完美运行,201根本不工作并且在运行时崩溃.这对我来说非常令人惊讶.
我实现了两个类:"Swarm"和"Boid".Swarm用于保存指向swarm的所有boid的指针,但计算不多,在Boid中发生移动.
swarm.h:
#ifndef __SWARM_H__
#define __SWARM_H__
#include <vector>
#include "boid.h"
namespace Core {
class swarm {
public:
swarm();
~swarm();
bool move(float timeSinceLastFrame);
bool addBoid(boid *thisBoid);
bool removeBoidByName(std::string boidName);
bool writeAllBoidNames();
std::vector<boid*> getFlockMates();
private:
std::vector<boid*> flock;
float timePassed;
};
}
#endif
Run Code Online (Sandbox Code Playgroud)
boid.h:
#ifndef __BOID_H__
#define __BOID_H__
#include "Ogre.h"
#include <vector>
#include <stdlib.h>
namespace Core {
class swarm;
class boid {
public:
boid(Ogre::SceneNode *thisNode, Ogre::String orientation, swarm *thisSwarm); // Constructor - direkter Node-Zugriff
boid(Ogre::MovableObject *thisObject, …Run Code Online (Sandbox Code Playgroud) 我在Android上的Qt 5.5中使用QNetworkAccessManager时遇到问题.通过http GET下载一个简单的小图形文件会导致很多垃圾收集调用,并在此期间锁定UI.随后的GET可以完美地工作,没有这些GC调用.代码如下:
void DownloadManager::downloadFile(QUrl fromUrl, QString toFilePath) {
_currentFilePath = toFilePath;
QNetworkRequest request;
request.setUrl(fromUrl);
qDebug() << "before";
_currentReply = _mgr.get(request);
qDebug() << "after";
connect(_currentReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(downloadError(QNetworkReply::NetworkError)));
connect(_currentReply, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(downloadProgress(qint64,qint64)));
connect(_currentReply, SIGNAL(finished()), this, SLOT(downloadFinished()));
}
Run Code Online (Sandbox Code Playgroud)
DownloadManager是一个自定义的QObject派生类,没有任何与get请求相关的特殊功能._mgr是在DownloadManagers cTor期间分配的QNetworkAccessManager对象.
正如您所看到的,这只是一个获取请求的教科书示例,没有什么太花哨的.正如我所说:它在大多数情况下都有效.只有第一个get请求最终会像这样:
D/ .../downloadmanager.cpp:61 (void DownloadManager::downloadFile(QUrl, QString)): before
D/dalvikvm(13298): GC_CONCURRENT freed 2290K, 25% free 10911K/14407K, paused 2ms+3ms, total 29ms
D/dalvikvm(13298): GC_CONCURRENT freed 501K, 25% free 10884K/14407K, paused 13ms+2ms, total 35ms
D/dalvikvm(13298): GC_CONCURRENT freed 524K, 25% free 10892K/14407K, paused …Run Code Online (Sandbox Code Playgroud)