将char数组传递给参数化构造函数失败

时间:2015-04-07 16:29:40

标签: c++ arrays oop constructor

我发现将char数组传递给函数时出现问题。这基本上是一个参数化的构造函数,我看到了一个问题。问题是将char数组传递给参数化构造函数。

这是代码:

#include <iostream>
#include <cstring>

 using namespace std;

class kinda
{
int a;
char name[10];

    public: 
    kinda()
    {
        cout<<"in default constr"<<endl;
        a=0;
        name[0]='\0';  
    }

    ~kinda()
    {
        cout<<"in default destr"<<endl;
    }

    kinda(int val,char* naam)
    {
        cout<<"in param constr"<<endl;
        a=val;
        strcpy(name,naam);
    }

    kinda(kinda &obj)
    {
        cout<<"in copy constr"<<endl;
        a=obj.a;
        strcpy(name,obj.name);
    }

    void display()
    {
        cout<<"obj details"<<endl;
        cout<<"a="<<a<<endl;
        cout<<"name="<<name<<endl;
    }
};


int main()
{
    kinda ob,ob1;
    char a[]="prashu";

    ob.display();
    ob(7,a);
    ob.display();

    ob1.display();
    ob1=ob;
    ob1.display();

    return 0;
}

我得到的错误是:

  

[错误]无法调用'(kinda)(int,char [7])'

有人可以告诉我这是为什么吗?

3 个答案:

答案 0 :(得分:2)

您无法在已经构造的对象上调用构造函数。 要么使构造函数成为普通的成员函数,要么立即使用所需的构造函数构造对象。

答案 1 :(得分:2)

kinda(int val,char* naam)只能用于初始化对象。
ob已初始化kinda ob,ob1;,因此无法构建两次。
ob(7,a); //错误

答案 2 :(得分:0)

为了使用构造函数,必须在声明对象的地方使用它。

kinda ob(7,a);  // oh make a kinda call it ob and use the constructor

按照您的方式进行操作将其视为函数调用。

kinda ob;
//...
ob(7,a)  // call a function called ob with parameters (7, a)
         // error.  there is no ob function