C++ 没有与参数列表匹配的构造函数实例--参数类型为:
我得到的C++ 没有与参数列表匹配的构造函数实例--参数类型为:,c++,templates,C++,Templates,我得到的构造函数“MyClass::MyClass[with t=double]”的实例与参数列表不匹配——参数类型为:(MyClass) 我只想把一个对象的值复制到另一个对象中。 它在没有模板语法的情况下运行良好 #include <iostream> using namespace std; template<class t> class MyClass{ t x,z; public: MyClass(){} MyClass (const t
构造函数“MyClass::MyClass[with t=double]”的实例与参数列表不匹配——参数类型为:(MyClass)
我只想把一个对象的值复制到另一个对象中。
它在没有模板语法的情况下运行良好
#include <iostream>
using namespace std;
template<class t>
class MyClass{
t x,z;
public:
MyClass(){}
MyClass (const t a,const t b):x(a),z(b) {
}
MyClass(const MyClass& obj){
x=(t) obj.x;
z=(t)obj.z;
}
// access content:
void content() {
cout<<x<<z<<endl;
}
};
int main () {
MyClass<int> foo(34,23);
MyClass <double> bar(foo);
bar.content();
foo.content();
return 0;
}
#包括
使用名称空间std;
模板
类MyClass{
tx,z;
公众:
MyClass(){}
MyClass(常数t a,常数t b):x(a),z(b){
}
MyClass(常量MyClass和obj){
x=(t)obj.x;
z=(t)对象z;
}
//访问内容:
空隙率(){
coutMyClass
是一个模板。当您在其声明中写入MyClass
时,这实际上是MyClass
的缩写,因此MyClass
没有采用MyClass
的构造函数
如果希望允许转换,则需要第二个模板参数,例如
template <typename T>
struct foo {};
template <typename R,typename T>
foo<R> convert_foo(const foo<T>& f) { return {}; }
模板
结构foo{};
模板
foo convert_foo(const foo&f){return{};}
问题在于MyClass
和MyClass
是不同的类型,您只有一个复制构造函数,它接受相同类型的对象
为了让您的代码正常工作,我必须更改两件事:
template<typename u>
MyClass(const MyClass<u>& obj){
x=(t) obj.x;
z=(t)obj.z;
}
在MyClass-bar(foo)
MyClass
行中,与MyClass
的类型不同,这里的问题是您试图从不同的、不相关类型的对象复制构造。它的顺序为MyClass-bar(foo)
工作foo
也应该是MyClass
。谢谢先生/女士。它帮助我code
template void-fun(MyClass&obj1,const-MyClass&obj2){obj1.x=(u)obj2.x;obj1.z=(u)obj2.z;}code
我认为它可以工作,但问题将是访问私有服务器variable@thesummer我只是想展示如何实现它。我正计划改进它,但另一个答案已经展示了如何使用构造函数,示例主要是演示第二个模板参数的使用
template<typename> friend class MyClass;