2011-07-06 44 views
1

于是,我就做一个载体,其元素是对一个结构指针和一个int的,而我开始认为这是不可能的..vector <pair <aStruct *,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无效 错误:在自变量2中为模板结构的std模板参数列表类型/值不匹配::对

这是不可能的事情吗? 有什么可以替代解决方案呢? 您的输入将会非常感谢!

+0

你必须阅读一些C++教程。 –

+0

尽量不要在容器中存储裸指针。这样做很难做到正确的内存管理。 – kennytm

+0

当创建对添加到向量中时,您应该返回像这样的模板参数(nod1,3) 通常,您可以对其进行typedef – gastush

回答

3

nodevector.push_back(pair < node *,int>(nod1,3));

+0

哦,上帝,我感到很愚蠢,非常感谢你!我觉得我缺乏睡眠.. – Mang

8

当您创建新对时,请改为使用make_pair

所以此工程:nodevector.push_back(make_pair(nod1, 3));

1

问题是你正在使用nod13作为模板参数一对:

nodevector.push_back(pair<nod1,3>); 

相反,尝试:

nodevector.push_back(pair<node, int>(nod1,3)); 

或更好还有:

nodevector.push_back(make_pair(nod1,3)); 
0

创建一对对象。你还没有创建它。

你认为“对”是正确的语法吗?

纠正它。

0

尝试这样的事情,你很困惑你模板参数为应计类操作。

vector< pair<node*,int> > nodvector; 

node * nod1 = new node(“HELLO”); node * nod2 =新节点(“WORLD”); nodvector.push_back(pair(nod1,4)); 删除nod1; 删除nod2; }

1

以上所有答案都是正确的。

你的代码试图将“类型”推入向量中。这就是为什么编译器很生气:)。

你正在做的事情一样

int i = 10; 
vector<int> v; 
v.push_back(int); 

显然,我们希望

v.push_back(i); 

希望有所帮助。

相关问题