为 std::vector<struct> 创建一个 getter 函数

Posted

技术标签:

【中文标题】为 std::vector<struct> 创建一个 getter 函数【英文标题】:Creating a getter function for an std::vector<struct> 【发布时间】:2014-12-08 22:54:53 【问题描述】:

这是我第一次在这里提出问题,如果格式有点不对,我深表歉意。此外,我几年来第一次回到编程领域,所以我很生疏,我对如何为我的结构向量创建 getter 函数感到困惑。

assetLoader.h:

public:
    assetLoader();
    virtual ~assetLoader();

    std::vector<assetLoader:playerStruct> getTypesOfPlayer() return typesOfPlayer;

private:
    //Create a struct to hold the Player data
    struct playerStruct
    
    ;
    playerStruct newPlayer;
    std::vector <playerStruct> typesOfPlayer;

每当我尝试编译解决方案时,都会收到以下错误:

错误:模板参数 1 无效

错误:模板参数 2 无效

我已经尝试了几种不同的尝试来自己修复它,但我没有设法得到任何帮助,因此将不胜感激:)

【问题讨论】:

assetLoader:playerStruct 应该是assetLoader::playerStruct 您将返回向量的副本。我不知道你想对数据做什么,但你可能想考虑返回一个引用:const std::vector&lt;assetLoader::playerStruct&gt;&amp; 感谢您的回复。我已经修改了函数,但现在得到:嵌套名称说明符中使用的不完整类型“assetLoader”? 指针和引用可以使用前向声明。其他用途需要定义 【参考方案1】:

您需要转发声明您的 playerStruct 或之前定义它。

这是你将如何转发声明:

class assetLoader
  struct playerStruct;
public:
  assetLoader();
  virtual ~assetLoader();
  std::vector<assetLoader::playerStruct> getTypesOfPlayer() 
    return typesOfPlayer;
  
private:
  //Create a struct to hold the Player data
  struct playerStruct
  
  ;
  playerStruct newPlayer;
  std::vector <playerStruct> typesOfPlayer;
;

【讨论】:

对不起,我没有尽快回复,直到现在才能尝试。工作出色。非常感谢

以上是关于为 std::vector<struct> 创建一个 getter 函数的主要内容,如果未能解决你的问题,请参考以下文章

std::vector push_back报错Access violation

使用for循环为结构的成员赋值

如何使用可变长度类型将包含多个 std::vector<float> 的结构写出到 HDF5?

具有可访问构造函数的 std::vector< T >::iterator

从 std::vector<std::vector<float>> 转换为 float**

std::vector<cv::Vec3b> 到 cv::Mat