C++编写求int列表最小值模板类时出现parse errors问题求解
错误原因及修复方案
1. 编译标准不匹配
你出现的parse error before '...'类报错核心原因是可变参数模板、枚举底层类型指定都是C++11才新增的语法特性,如果编译器默认使用C03及更低标准编译,会完全无法识别相关语法,直接报解析错误。
修复方式:编译时增加指定C标准的参数,比如GCC/Clang使用-std=c++11及更高版本参数,MSVC使用/std:c++11及更高版本参数。
2. 可变参数包未正确展开
你递归实例化模板的代码行:value = std::min(first, ListMin<others>::value)存在语法错误,others是可变参数包,必须添加...完成展开才能传递给下一级模板,修改为:value = std::min(first, ListMin<others...>::value)
3. 缺失必要头文件
代码中使用的std::min需要引入<algorithm>头文件,std::cout、std::endl需要引入<iostream>头文件,缺失也会触发编译报错。
修改后完整可运行代码
ListMin.hpp
#include <algorithm> template <int ... list> class ListMin; template <int first, int ... others> class ListMin <first, others ...> { public: enum : long { value = std::min(first, ListMin<others...>::value) }; }; template <int first> class ListMin <first> { public: enum : long { value = first }; };
Main.cpp
#include <iostream> #include "ListMin.hpp" int main() { std::cout << "min( [ 1, -5, 3 ] ) = " << ListMin<1, -5, 3>::value << std::endl; return 0; }
编译运行示例
使用GCC编译命令:g++ Main.cpp -std=c++11 -o list_min
运行后输出:min( [ 1, -5, 3 ] ) = -5
内容的提问来源于stack exchange,提问作者DarkKooky
相关产品推荐
相关产品推荐

