没有匹配的函数调用奇怪的错误

时间:2015-11-29 10:16:12

标签: c++ template-classes

    #include<iostream>
    using namespace std;
    const int size=4;

    template<class datatype>
    class vector
     {

        datatype *v;

        public:
            vector()
            {

                v=new datatype[size];
                for(int i=0;i<size;i++)
                    {
                        v[i]=0;//initilaizing vector
                    }
            }
            vector(datatype *ptr)
            {
                //v=ptr;
                for(int i=0;i<size;i++)
                {
                    v[i]=ptr[i];
                }
            }

            datatype operator*(vector &obj)
            {
                datatype sum=0;
                for(int i=0;i<size;i++)
                    {
                        sum+=(this)->v[i] * obj.v[i];

                    }
                    return sum;
            }
};

     int main()
    {
        int x[4]={1,2,9,11};
        int y[4]={4,7,7,4};

        vector<int> v1;
        v1(x);//no matching call
        vector<int> v2;
        v2(y);//no matching call
       // v1(x);
       // v2(y);
         int total=v1*v2;
         cout<<"Total of v1*v2="<<total<<endl;
    }    
  
    

我传递整数数组x和y的构造函数给出了以下错误     错误:无法匹配调用&#39;(向量)(int [4])&#39;。
    错误:调用(向量)(int [4])不匹配。将数组赋给指针有一些问题     任何人都可以更正我的代码。

  

1 个答案:

答案 0 :(得分:1)

在您的代码中:

    vector<int> v1;
    v1(x);//no matching call
    ^^^^^^

是一个函数调用,但你没有名称v1的函数,你的向量也不会重载operator()。你可能想要:

    vector<int> v1(x);

另外,您需要:

v=new datatype[size];

vector(datatype *ptr)构造函数的开头。