【问题标题】:Passing a vector of object pointers to a class (C++) [closed]将对象指针向量传递给类(C++)[关闭]
【发布时间】:2013-04-18 06:43:22
【问题描述】:

我有一个对象指针向量。

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 类。

【问题讨论】:

  • 你需要在NeedsObjects之前声明myObject

标签: c++ class object vector containers


【解决方案1】:

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

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;
};

【讨论】:

  • @WernerHenze 它是一个指针容器。当然这里允许不完整的类型。
  • @WernerHenze 对,你必须等到 OP 进行编辑,然后你才能删除它:)
  • 这完全解决了我的问题,非常感谢
  • 现在你可以再给我一票;)
【解决方案2】:

你没有告诉编译器myObject是什么,所以它不知道如何创建std::vector。使用 .h 文件添加引用或在此翻译单元中定义 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;
};

【讨论】:

    【解决方案3】:

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

    你基本上有两个选择:

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

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

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

    class myObject;
    

    【讨论】:

    • 添加头文件无效,但部分声明有效!
    • 你在哪个头文件中声明了 myObject 类?
    猜你喜欢
    • 2018-09-03
    • 1970-01-01
    • 2022-01-08
    • 2019-08-07
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多