【问题标题】:std::array as element type of another standard container? [closed]std::array 作为另一个标准容器的元素类型? [关闭]
【发布时间】:2016-02-02 04:21:22
【问题描述】:

似乎没有任何规则反对它,我遇到的错误

std::vector< std::array<int,8> > output;
output.resize (8);

C2036 'std::array&lt;int,0x08&gt; *': unknown size

这没有意义。 &lt;vector&gt; 内部的代码正在推进内部end 指针,该指针也用于其他地方(扩展的计算大小也是如此)。 struct{int x[8];} 的大小肯定是“已知的”。

这是怎么回事?


嗯,因为它不仅仅是一个简单的错字或类似的错误,而且当其他人尝试它时似乎可以正常工作(并且其他人编写的示例对我有用!)我削减了源文件,直到除了有问题的语句什么都没有留下它仍然失败。这是整个文件。预编译头文件已关闭。

//#include <SDKDDKVer.h>

#include <vector>
    
int main()
{

    std::vector< std::array<int,8> > output;
    output.resize (16);

}

我正在使用 x64 构建,发布版本。


想通了:

vector 不是缺少#include,而是array 缺少#include! 它显然是在其他标头中前向声明的,但不完整。

【问题讨论】:

  • 错误消息说指针的大小是未知的——当然,这也没有意义。
  • 你能提供更多代码来更好地理解上下文吗?你添加了“#include ”行吗?
  • 请复制粘贴您提供给编译器的确切文件(带有#includes)。
  • 如果没有mcve 和有关编译器的详细信息,我们无法提供帮助,您的帖子可能会被关闭。
  • @JDługosz 当我删除 &lt;array&gt; 的包含时,我得到了同样的错误。你确定你的包含是正确的吗?

标签: c++ stl visual-c++-2015


【解决方案1】:

这段代码似乎一切正常。

#include <vector>
#include <array>

int main() {
    std::vector< std::array<int,8> > output;
    output.resize(8);
    return 0;
}

Ideone test example

您是否添加了#include &lt;array&gt; 行?

【讨论】:

  • 是的,它有正确的包含...它在 头文件模板函数中阻塞 resize()。
  • @JDługosz,你能提供更多代码来更好地理解错误上下文吗?而且,完整的编译器错误输出。
  • @JDługosz “它在 resize() 的 头文件模板函数中阻塞”是什么意思?您收到哪些错误消息?
  • 不知道他现在要做什么。
  • @RyanFung, Microsoft Visual Studio 14.0\VC\include\vector(1145): error C2036: 'std::array&lt;int,0x08&gt; *': unknown sizevector::resize 的模板代码中,如果您仍然感兴趣的话。
猜你喜欢
  • 1970-01-01
  • 2021-06-05
  • 1970-01-01
  • 2018-11-11
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多