1

我有一个对象指针向量。

std::vector<myObject *> listofObjects;

我想将它们传递给另一个需要访问它们的对象。

当我尝试执行以下操作时:

class NeedsObjects 
{
 public:
    NeedsObjects(std::vector<myObject *> &listofObjects)
 private:
    std::vector<myObject *> &listofObjects;
};

然后在初始化列表中初始化向量我得到以下错误:

'myObject' was not declared in this scope
template argument 1 is invalid
template argument 2 is invalid

我究竟做错了什么?我要做的就是将一个向量传递给 NeedsObjects 类。

4

3 回答 3

5

您使用指向该对象的指针,因此您不必定义完整的对象结构,只需在使用之前在此文件中声明它:

class myObject; // pre declaration, no need to know the size of the class
class NeedsObjects 
{
 public:
    NeedsObjects(std::vector<myObject *> &listofObjects)
 private:
    std::vector<myObject *> &listofObjects;
};
于 2013-04-18T06:54:49.790 回答
3

你不告诉编译器是什么myObject,所以它不知道如何创建std::vector. 使用.h-file 添加引用或myObject在此翻译单元中定义。

要么做

#include "myObject.h"

class NeedsObjects 
{
 public:
    NeedsObjects(std::vector<myObject *> &listofObjects)
 private:
    std::vector<myObject *> &listofObjects;
};

如果您已myObject在单独的标题中定义

或者

class myObject {
//declaration goes here
};

class NeedsObjects 
{
 public:
    NeedsObjects(std::vector<myObject *> &listofObjects)
 private:
    std::vector<myObject *> &listofObjects;
};
于 2013-04-18T06:45:42.720 回答
3

如我所见,您的代码中没有任何 myOpbject 类型的声明。

你基本上有2个选择:

a) 包含完全声明 myObject 的标头。

#include "myObject.h" // ... or something near to this.

b) 让我们认为 myObject 是类。您在此处提供的代码(至少是声明部分)实际上不需要知道 myObject 的大小,因此您只需声明 myObject 是类并在其他地方声明即可。

class myObject;
于 2013-04-18T06:54:30.477 回答