2010-09-23 42 views
1

我昨天对此发表了一篇文章,但这是一个完全不同的问题。不知道我是否应该提出一个新问题,或只是回复旧问题,但这里就是这样。有关向量阵列的结构的问题

基本上我建立结构的我的矢量阵列如下..

class Debugger : public Ogre::SimpleRenderable 
{ 
    struct DebugVertex 
    { 
     Ogre::Vector3 v; 
     unsigned int color; 
    }; 

    typedef std::vector<DebugVertex> Buffer; 

protected: 

    Buffer    mLineBuffer; 

问题是在例如代码存在的...

mLineBuffer.reserve(128);报告它不是Debugger :: DebugVertex的成员。这适用于所有向量操作,如保留,空,ptr,大小等。它们都存在,但它正在结构中寻找它们。我该如何访问这些?

+0

如果您删除typedef并直接声明,该怎么办:std :: vector mLineBuffer – vulkanino 2010-09-23 10:59:41

+0

您可以显示一些相关的诊断输出吗? – 2010-09-23 10:59:56

+0

你能告诉我们你是如何试图做'储备'吗? – Naveen 2010-09-23 11:04:27

回答

0

什么是确切的编译器错误?我的猜测是DebugVertex不符合包含在STL容器中所需的接口,如std::vector,可能是因为Ogre::Vector3需要工作。

您能否包含Ogre::Vector3的声明?

+0

那么由于某种原因,我只是重新编译没有改变任何东西(带来了错误),它编译罚款减去几个简单的错误。我不知道之前是什么造成了他们,但由于某种原因,他们已经不在了。我想知道,utArray(我正在用vector替换)使用了mLineBuffer.ptr();我找不到矢量中的等效函数,是不是有一个? – 2010-09-23 11:21:41

+0

Ogre :: Vector3代码在线提供,请参阅http://ogre3d.org – Klaim 2010-09-23 11:23:23

+2

@Brett:utArray的ptr方法做了什么?你可能只是在寻找'&mLineBuffer [0]',如果我的猜测是正确的,ptr会返回一个指向内部数组的指针。 – 2010-09-23 11:30:39

1

您的typedef使用私有结构,调试器类以外的任何代码尝试使用它将无法编译。

的std ::向量是不是你的类的一部分...

要么做出的std ::矢量< DebugVertex>朋友类(没有测试,有检查),或只是让你的结构公开。