C++ 对CopyConstructor的调用没有匹配的函数
在那里。我有类似于下面的代码C++ 对CopyConstructor的调用没有匹配的函数,c++,class,constructor,copy-constructor,C++,Class,Constructor,Copy Constructor,在那里。我有类似于下面的代码 struct SomeClass { SomeClass(); }; SomeClass::SomeClass() {} template <class K, class T> struct BaseStruct { typedef K kType; typedef T tType; kType _key; tType _element; BaseStruct();
struct SomeClass
{
SomeClass();
};
SomeClass::SomeClass()
{}
template <class K, class T>
struct BaseStruct
{
typedef K kType;
typedef T tType;
kType _key;
tType _element;
BaseStruct();
BaseStruct(kType& key, tType& element);
BaseStruct(BaseStruct&);
};
template <class K,class T>
BaseStruct<K,T>::BaseStruct()
{}
template <class K,class T>
BaseStruct<K,T>::BaseStruct(kType& key, tType& element)
{
_key=key;
_element=element;
}
template <class K,class T>
BaseStruct<K,T>::BaseStruct(BaseStruct& BaseStructInstance)
{
_key=BaseStructInstance._key;
_element=BaseStructInstance._element;
}
struct DerivedStruct:public BaseStruct<int, SomeClass>
{
};
int main(int argc, char *argv[])
{
DerivedStruct derivedStructInstance;
derivedStructInstance=DerivedStruct(0,SomeClass());
}
基本上,我是说sctuct缺少一个副本构造函数,而我是通过传递其成员值来对结构进行序列化。
此外,我有一个复制构造函数
<如何解决问题? 从C++模板常见问题: 该标准规定,模板中的非限定名称通常是非依赖的,必须在定义模板时查找。由于当时不知道依赖基类的定义(可能还没有看到基类模板的专门化),因此决不会将非限定名称解析为依赖基类的成员。如果模板中的名称应该引用基类成员或间接基类,则可以通过限定它们使它们成为从属的,或者通过使用声明将它们引入模板的范围 解决方案:
struct DerivedStruct : public BaseStruct<int, SomeClass>
{
using BaseStruct::BaseStruct;
};
有了这些论点:
DerivedStruct(0, SomeClass());
但是非常量引用不能绑定到临时值,因此这会导致不匹配的函数调用错误
尝试通过常量引用传递参数,以便它可以接受右值,而不仅仅是左值:
BaseStruct(kType const& key, tType const& element);
当您调用
DerivedStruct(0,SomeClass())
时,您期望得到什么?@LuchianGrigore基本上我正在对一个没有回答我问题的DerivedStruct实例进行序列化。您希望该代码段调用哪个构造函数?构造函数没有名称,而使用声明的使用的是C++11“继承构造函数”功能,这类似于仅为DerivedStruct
声明和定义许多构造函数,这不仅仅是一种调用同一函数的新方法。请注意,问题与名称查找无关。默认情况下不会继承构造函数。在C++03中,您必须显式定义一个DerivedStruct
ctor,或者在您的答案中使用C++11解决方案。@JesseGood既然我的解决方案有效,那么实际的解释是什么呢?谢谢。我试过你的建议。我得到了没有使用模板参数的'template struct BaseStruct'。我尝试添加模板参数,得到了一个使用BaseStruct::BaseStruct'names构造函数的隐式表达式。我怎样才能解决这个问题?@geraldCelente哦,你的编译器没有使用新标准(C++11)。尝试添加-std=c++11
标志
DerivedStruct(0, SomeClass());
BaseStruct(kType const& key, tType const& element);