之前的问答(here)表明,可以通过以下方式创建元组列表:
#include <vector>
#include <boost/tuple/tuple.hpp>
using namespace std;
using boost::tuple;
typedef vector< tuple<int, int> > tuple_list;
虽然在使用C ++ 98运行时没有出现错误,但C ++ 1y(Ubuntu上的GCC / GNU)给出了:
error: template argument 1 is invalid
typedef vector< tuple<int, int> > tuple_list;
^
error: template argument 2 is invalid
error: invalid type in declaration before ‘;’ token
typedef vector< tuple<int, int> > tuple_list;
^
知道发生了什么事吗? (如果我可以对我想要的另一个帖子发表评论,但很棒的SO说我的声誉太低而无法发表评论!)
答案 0 :(得分:7)
问题是名称冲突,您是using boost::tuple
还是namespace std;
,这两者都会将tuple
带入全局范围,因此您最终会得到同一模板的两个定义。我不明白为什么编译器在诊断错误方面不是更明确的......
删除using boost::tuple;
或using namespace std;
并限定相应的名称:
#include <vector>
#include <boost/tuple/tuple.hpp>
//using namespace std;
//using boost::tuple;
typedef std::vector< boost::tuple<int, int> > tuple_list;
int main()
{
tuple_list foo;
}
我想这是为什么不建议使用using
的一个主要例子;)