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,你应该采取行动。如果在构造函数中分配内存,在析构函数中释放内存,这将非常有用。