Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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++ 类型“Class Name”不提供呼叫运算符。C++;_C++_Constructor - Fatal编程技术网

C++ 类型“Class Name”不提供呼叫运算符。C++;

C++ 类型“Class Name”不提供呼叫运算符。C++;,c++,constructor,C++,Constructor,假设如下: 我们有班级人员,还有班级工作 class Job { public: Job(); //default constructor Job(char * n); //parameterized constructor ~Job(); //destructor protected: Salary p; //another class } class Person { public: Person(); //default constr

假设如下:

  • 我们有
    班级人员
    ,还有
    班级工作

    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\u job\u name(char*n)
调用类job的参数化构造函数时,我得到了这个错误
类型“job”没有提供调用操作符。
有什么想法吗

这就是
set\u job\u name()
要做的:

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

obj(n) 
相当于:

obj.operator()(n) 
这是不对的,因为
作业
没有
操作符()
功能

要重置
obj
的值,请使用:

void Person::set_job_name(char * n) 
{
   obj = Job(n);
}
通过在
Job
中提供
set\u name
函数,您可以稍微简化它。如果您这样做,以上内容可以是:

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

在这种情况下,
obj(n)
不是对
作业(char*n)
构造函数的调用。它是对
Job::operator()(char*n)
(不存在)的调用。你可能想简单的C++更新:非常名字>代码:人:StIsJOPJONNEX/<代码>闻起来可疑。为什么不
Person::set_job
?我做的是
obj=job(n)但是我在
作业
中的另一个类的析构函数中得到了一个seg错误!我的问题中没有添加该类,我将添加它now@Prall1988,你应该采取行动。如果在构造函数中分配内存,在析构函数中释放内存,这将非常有用。