我在尝试使用此代码在std::pair
中插入std::vector
时遇到问题:
template <class R>
class AVectorContainner
{
public:
AVectorContainner()
{
mVector= new std::vector<entry>;
}
typedef std::pair<int ,R *> entry;
void insert(R* aPointer, int aID)
{
entry aEntry;
aEntry=std::make_pair(aID,aPointer );
mVector->push_back(aEntry);
}
private:
std::vector<entry> * mVector;
}
这是主文件的一部分,我声明了一个类的指针,然后我在模板类的初始化中使用它。
在main.cpp中:
int main()
{
SomeType * aTipe= new SomeType;
int aID=1;
AVectorContainer<SomeType> * aContainer= new AVectorContainer;
aContainer->insert(aTipe,aId);//error line
delete aTipe;
delete aContainer;
return 0;
}
编译器输出:
error: non-static reference member 'const int& std::pair<const int&, SomeType *>::first', can't use default assignment operator
error: value-initialization of reference type 'const int&'
答案 0 :(得分:2)
修正了所有拼写错误,比较两个...他确实喜欢20行中的100个!
#include <vector>
#include <utility>
template <class R>
class AVectorContainer
{
public:
AVectorContainer()
{
mVector= new std::vector<entry>;
}
typedef std::pair<int ,R *> entry;
void insert(R* aPointer, int aID)
{
entry aEntry;
aEntry=std::make_pair(aID,aPointer );
mVector->push_back(aEntry);
}
private:
std::vector<entry> * mVector;
};
class SomeType
{
public:
SomeType(){ x=5; }
~SomeType(){ }
int x;
};
int main()
{
SomeType * aTipe= new SomeType;
int aID=1;
AVectorContainer<SomeType> * aContainer= new AVectorContainer<SomeType>;
aContainer->insert(aTipe,aID);//error line
return 0;
}
答案 1 :(得分:2)
原始海报未能实际发布导致问题的代码。
他已经使用正确的代码编辑了我的帖子,以证明问题。演示该问题的代码如下:
template <class R, typename B=int>
class AVectorContainer
{
public:
AVectorContainer() {}
typedef R* ptr_Type;
typedef const B & const_ref_Type;
typedef std::pair<const_ref_Type ,ptr_Type> entry;
void insert(ptr_Type aPointer, const_ref_Type aID) {
entry aEntry=std::make_pair(aID,aPointer);
mVector.push_back(aEntry);
}
private:
std::vector<entry> mVector;
};
class SomeType
{
public:
SomeType(){ x=5; }
~SomeType(){ }
int x;
};
int main()
{
SomeType * aTipe= new SomeType;
int aID=1;
AVectorContainer<SomeType> aContainer;
aContainer.insert(aTipe,aID);
return 0;
}
编译器输出:
/usr/include/c++/4.7/bits/stl_pair.h:88: error: non-static reference member 'const int& std::pair<const int&, SomeType*>::first', can't use default assignment operator
缺陷在于以下几个方面:
typedef R* ptr_Type;
typedef const B & const_ref_Type;
typedef std::pair<const_ref_Type ,ptr_Type> entry;
std::vector<entry> mVector;
在这里,原始海报尝试制作包含常量引用的vector
pair
个,然后执行此操作:
entry aEntry;
aEntry=std::make_pair(aID,aPointer )
这会尝试将一对分配给另一对。但是const&
变量不能分配给另一个变量 - 它们可以从另一个const&
构建(初始化),但不能分配。
一个简单的解决方法是:
entry aEntry=std::make_pair(aID,aPointer )
这样我们就不会从另一个aEntry
构建entry
,而是默认构建aEntry
(这也是非法的:const&
必须初始化),然后分配给它
答案 2 :(得分:0)
修正所有拼写错误(Containner
,aId
,遗失;
等)后,代码编译得很好。