类型“类名”不提供调用运算符.C++

Type `Class Name` does not provide a call operator. C++

本文关键字:调用 运算符 C++ 类名 类型      更新时间:2023-10-16

假设如下:

  • 我们有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);
}

obj(n) 

相当于:

obj.operator()(n) 

这是不对的,因为Job不具有operator()功能。

要重置obj的值,请使用:

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

您可以通过在Job中提供set_name函数来稍微简化它。如果你这样做,上面可以是:

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