Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 没有与参数列表匹配的构造函数实例--参数类型为:_C++_Templates - Fatal编程技术网

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;
}
//访问内容:
空隙率(){

cout
MyClass
是一个模板。当您在其声明中写入
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;