-1
//TreeBox.h
#pragma once
#include "ListBox.h"
struct ItemInfo
{
    std::string _fileName;
    std::string _childName;
    std::string _time;
    std::string _format;
    std::string _size;

    std::string _nodeKey;
};
class TreeBox
{
 ...
}
//ListBox.h
class
{
 public:
 std::vector<ItemInfo> _itemList; //compile error
 
}

我想通过在“TreeBox.h”中使用结构来在“ListBox.h”中使用 std::vector 但它是编译错误分配器 C2903

我该如何使用它?

4

3 回答 3

2
  1. 您不需要在 TreeBox.h 中包含 ListBox.h
  2. 始终遵循先包含标准库然后包含 .h 文件的做法

#pragma once
#include <vector>
#include <string>
class ListBox;
struct ItemInfo
{
    std::string _fileName;
    std::string _childName;
    std::string _time;
    std::string _format;
    std::string _size;

    std::string _nodeKey;
};
class TreeBox
{

};


#pragma once
#include <initializer_list>
#include "TreeBox.h"

class ListBox
{
public:

    std::vector <ItemInfo> _itemList;
private:

};
于 2021-01-04T05:21:22.537 回答
0

只需添加#include <vector>到标题的顶部以包含 STL 向量。#在文件顶部包含文件头允许您访问在该头中定义的对象。

于 2021-01-04T04:49:49.417 回答
0

你包括ListBox.h在开头TreeBox.h。具体来说,您将它包含在定义的部分之前TreeBox.hItemInfo

因此,您试图vector<ItemInfo>在编译器知道 anItemInfo可能是什么之前定义 a ,但它不喜欢那样。

重新排列你的定义,所以当编译器看到代码试图创建 avector<ItemInfo>时,它已经看到了 的定义ItemInfo(并确保你已经包含<vector>了 ,以防你还没有)。

因此,按照正确的顺序,您将拥有如下内容:

#include <vector> // First, tell the compiler about `vector`

class ItemInfo {  // ...and `ItemInfo`
    // ...
};

class ListBox {
    std::vector<ItemInfo> itemList;  // *Then* we can use `vector` and `ItemInfo`
    // ...
};

如果您希望其中的某些部分位于您的单独标题中#include,那很好 - 但您仍然需要以正确的顺序获取定义。

于 2021-01-04T04:50:23.530 回答