我们可以在C ++中使用pair作为另一对的参数。
这是一个测试程序。
#include <iostream>
#include <utility>
int main()
{
std::pair<int,int> m;
m=std::make_pair(1,3);
int r = 3;
int *q = &r;
int **p =&q;
int **t = p;
std::pair<int**,<std::pair<int,int> > > i(p,m);
std::cout<<i[t];
return 0;
}
这是错误,我得到了。
Test.cpp: In function ‘int main()’:
Test.cpp:12:45: error: template argument 2 is invalid
std::pair<int**,<std::pair<int,int>>> i(p,m);
^
如果我改变了声明的格式并以下列方式编写了程序,
#include <iostream>
#include <utility>
int main()
{
std::pair<int,int> m;
m=std::make_pair(1,3);
int r = 3;
int *q = &r;
int **p =&q;
int **t = p;
std::pair<
int**,
<
std::pair<
int,
int
>
>
> i(p,m);
std::cout<<i[t];
return 0;
}
还有一个错误。
Test.cpp: In function ‘int main()’:
Test.cpp:20:7: error: template argument 2 is invalid
> i(p,m);
^
Test.cpp:20:14: error: expression list treated as compound expression in initializer [-fpermissive]
> i(p,m);
可能是什么问题以及如何解决?
另一方面,我做了一个程序,并在Windows 7机器上的一个非常古老的Dev-c ++编译器中编译它,它使用类似于上面的代码并且运行得非常好。这是我大学里的一个实验室程序,只有那个编译器。
上面的代码,我使用GNU g ++ 5.4.0在Windows 7和Ubuntu 16.04上运行
Ideone:Link to the actual program for reference
您可能还会看到我在上述链接中遇到的实际错误。
答案 0 :(得分:1)
您的代码存在两个问题。
cout
参数毫无意义#include <iostream>
#include <utility>
int main()
{
std::pair<int,int> m;
m=std::make_pair(1,3);
int r = 3;
int *q = &r;
int **p =&q;
int **t = p;
std::pair<
int**,
// < Omit this
std::pair<
int,
int
>
// > also this
> i(p,m);
// std::cout<<i.[t]; indexing with a pointer value doesn't make sense
// i. for a pair doesn't make sense, specify either first or second
std::cout<<i.first[0]; // <<<< Did you mean something like this?
return 0;
}
答案 1 :(得分:1)
这是不正确的:
std::pair<int**,<std::pair<int,int> > > i(p,m);
只需删除额外的<>
:
std::pair<int**, std::pair<int,int > > i(p,m);
此外,我不确定您在cout
部分尝试做什么,但pair
没有[]
运营商。您可以使用first
和second
:
i.first
i.second
i.second.first
i.second.second
如果您不想将另一对嵌套到另一对中,您可能也会对std::tuple
感兴趣:
std::tuple<int**, int, int> i;