我已经搜索过。但找不到明确的答案。因此,我提出了一个新问题。代码如下:
using namespace std;
using pairfortsp = pair<unique_ptr<vector<int>>, unique_ptr<int>>;
int main(int argc, char *argv[]){
unique_ptr<vector<int>> tmpptr1(new vector<int>{1});
unique_ptr<int> tmpptr2(new int(1));
unique_ptr<pairfortsp> tmpptr3(new pairfortsp<tmpptr1,tmpptr2>);
}
编译时,出现以下两个错误:
stackover.cpp:25:50: error: invalid operands to binary expression ('pairfortsp *' (aka
'pair<unique_ptr<vector<int> >, unique_ptr<int> > *') and 'unique_ptr<vector<int> >')
unique_ptr<pairfortsp> tmpptr3(new pairfortsp<tmpptr1,tmpptr2>);
..................
stackover.cpp:25:67: error: expected expression
unique_ptr<pairfortsp> tmpptr3(new pairfortsp<tmpptr1,tmpptr2>);
那么像我声明的那对那样为一对创建unique_ptr的正确步骤是什么?
谢谢。
答案 0 :(得分:1)
您似乎正在尝试将构造函数参数作为模板参数传递给std::pair
。也就是说,您使用的是< >
而不是( )
。
此外,由于无法复制unique_ptr
,因此必须std::move
将它们传递给构造函数。
以下代码使用g++ -std=c++17 Move.cc
进行编译。
#include <vector>
#include <memory>
#include <utility>
using namespace std;
using pairfortsp = pair<unique_ptr<vector<int>>, unique_ptr<int>>;
int main(int argc, char *argv[]){
unique_ptr<vector<int>> tmpptr1(new vector<int>{1});
unique_ptr<int> tmpptr2(new int(1));
unique_ptr<pairfortsp> tmpptr3(new pairfortsp(std::move(tmpptr1),std::move(tmpptr2)));
}