类型`Class Name`不提供调用操作符。 C ++

时间:2016-04-10 03:28:30

标签: c++ constructor

假设如下:

  • 我们有class Personclass Job

    class Job {
    public: 
        Job(); //default constructor
        Job(char * n); //parameterized constructor
        ~Job(); //destructor
    protected:
        Salary p; //another class
    }    
    
    class Person {
    public:
         Person(); //default constructor
         ~Person(); //destructor
         void set_job_name(char * n); //pass the job name to `Job` constructor
    
    protected:
         Job obj;
    };
    

当我尝试使用set_job_name(char * n)为类Job调用参数化构造函数时,我收到此错误Type "Job" does not provide a call operator.有任何想法吗?

这是set_job_name()做的事情:

void Person::set_job_name(char * n) {
    obj(n);
}

1 个答案:

答案 0 :(得分:2)

该行

;|.dlptr_offset|        DCD dynarec_local+28-(|.dlptr_pic|+8)

    ;ldr    r12, |.dlptr_offset|
;|.dlptr_pic|
    ;add    r12, pc, r12
    ldr    r12, =dynarec_local+28

相当于:

obj(n) 

obj.operator()(n) 没有Job功能以来,这是不对的。

要重置operator()的值,请使用:

obj

您可以通过在void Person::set_job_name(char * n) { obj = Job(n); } 中提供set_name功能来简化它。如果你这样做,上面可以是:

Job