基于可变参数模板长度初始化std::array时出现编译错误
编译失败原因及修复方案
你遇到的错误核心原因很简单:没包含std::array对应的标准头文件。
std::array的完整定义在<array>头文件里,你当前代码只包含了<iostream>和<vector>,编译器只能看到std::array的前置声明,会把它当作“不完全类型”,自然没法用它来定义类成员变量loadedValues。
另外要说明:你的核心思路是对的——用sizeof...(Types)获取可变参数包的长度来指定std::array的容量,这个用法完全符合C++标准。
修正后的代码如下:
#include <iostream> #include <vector> #include <array> // 必须包含这个头文件 template<typename Type, typename ...Types> class Object{ public: std::array<int, sizeof...(Types)> loadedValues; }; int main(){ auto k = new Object<int, float, int, int>(); }
这样用GCC 12编译就能正常通过了。
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

