所以我试着创建一个向量,其中元素是结构指针和int的对,我开始认为这可能是不可能的..
假设我有以下结构:
struct node{
string str;
int size;
node *child[3];
node(string str1):str(str1){ size = 0;}
};
和矢量:
vector< pair<node*,int> > nodvector;
然后我尝试创建一个新节点并将其放在向量中,显然它不起作用:
int main(){
node* nod1 = new node("HELLO");
node* nod2 = new node("WORLD");
nodevector.push_back(pair<nod1,3>);
delete nod1;
delete nod2;
}
编译器咆哮着说: nod1不能出现在常量表达式中 错误:模板参数1无效 错误:模板struct std :: pair
的模板参数列表中参数2的类型/值不匹配这只是不可能的事吗? 什么可以替代解决方案呢? 您的意见将非常感谢!
答案 0 :(得分:8)
创建新对时,请改用make_pair
。
这样可行:nodevector.push_back(make_pair(nod1, 3));
答案 1 :(得分:3)
nodevector.push_back(pair&lt; node *,int&gt;(nod1,3));
答案 2 :(得分:1)
问题是您使用nod1
和3
作为模板参数进行配对:
nodevector.push_back(pair<nod1,3>);
相反,请尝试:
nodevector.push_back(pair<node, int>(nod1,3));
或者更好:
nodevector.push_back(make_pair(nod1,3));
答案 3 :(得分:1)
以上所有答案都是正确的。
您的代码正在尝试将“类型”推送到向量中。这就是编译器生气的原因:)。
你正在做类似
的事情int i = 10;
vector<int> v;
v.push_back(int);
显然,你想要
v.push_back(i);
希望有所帮助。
答案 4 :(得分:0)
创建一个对象。你还没有创建它。
你认为“pair”是正确的语法吗?
纠正它。
答案 5 :(得分:0)
尝试类似这样的事情,你会混淆你操作应计类的模板参数。
vector< pair<node*,int> > nodvector;
node * nod1 = new node(“HELLO”); node * nod2 = new node(“WORLD”); nodvector.push_back(对(nod1,4)); 删除nod1; 删除nod2; }