gpt4 book ai didi

c++ - C 字符串与带有类成员函数的字符串类语法

转载 作者:行者123 更新时间:2023-11-30 17:15:53 25 4
gpt4 key购买 nike

我正在将此头文件从使用 C++ 字符串类转换为使用 C 字符串(字符数组)。

我在语法方面遇到困难。我知道传递一个指向 char 数组的指针应该与传递一个字符串以相同的方式工作。

我已经努力编译这个文件几个小时了,现在是时候寻求一些帮助了。编译器错误是内联的。任何帮助,将不胜感激。我要离开几个小时。我也可以发布主要功能,但我认为问题是从这里开始的。

#ifndef EMPLOYEE_H_INCLUDED
#define EMPLOYEE_H_INCLUDED
#endif // EMPLOYEE_H_INCLUDED

using namespace std;


class Employee
{
private:
int id; // employee ID
char *name; // employee name
double hourlyPay; // pay per hour
int numDeps; // number of dependents
int type; // employee type

public:
//Employee(); // Default Constructor


Employee(int initId,const char *name,
double initHourlyPay ,
int initNumDeps , int initType); // Constructor

bool set(int newId, char newName[], double newHourlyPay,
int newNumDeps, int newType);

int getID(); // returns the employee ID
char getName(); // returns Employee name
int getDeps(); // returns number of dependents
float getRate(); // returns rate of pay
int getType(); // returns employee type

};

int Employee::getType(){
return type;
}

float Employee::getRate(){

return hourlyPay;

}

int Employee::getDeps(){

return numDeps;
}

int Employee::getID(){

return id;
}

到这里就结束了。

|23|error: default argument missing for parameter 2 of 'Employee::Employee(int, char, double, int, int)'|
|62|error: prototype for 'Employee::Employee(int, char*, double, int, int)' does not match any in class 'Employee'|
|10|error: candidates are: Employee::Employee(const Employee&)|






char* Employee::getName(){
return name;
}

Employee::Employee( int initId, const char *name,
double initHourlyPay,
int initNumDeps, int initType )
{
bool status = set( initId, initName, initHourlyPay,
initNumDeps, initType );

if ( !status )
{
id = 0;
name = NULL;
hourlyPay = 0.0;
numDeps = 0;
type = 0;
}
}

bool Employee::set( int newId, char newName[20], double newHourlyPay,
int newNumDeps, int newType )
{
bool status = false;

if ( newId > 0 && newHourlyPay > 0 && newNumDeps >= 0 &&
newType >= 0 && newType <= 1 )
{
status = true;
id = newId;
name = newName;
hourlyPay = newHourlyPay;
numDeps = newNumDeps;
type = newType;
}
return status;
}

最佳答案

这里有一个问题:

Employee::Employee( int initId, const char *name, // <-- name
double initHourlyPay,
int initNumDeps, int initType )
{
bool status = set( initId, initName, initHourlyPay, // <-- initName
initNumDeps, initType );

我添加了一些与代码一致的注释;评论<-- initName显示您尝试传递名为的变量的位置 initNameset函数,但没有声明变量那个名字;相反,您有一个名为 name 的变量提前四行。

我认为这也不推荐:

bool Employee::set( int newId, char newName[20], double newHourlyPay,
int newNumDeps, int newType )

为什么要指定字符串的确切长度?它不会发生在其他地方。相同的函数参数给出为 char newName[]在函数声明中。事实上,在 set 里面功能你有这个:

            name = newName;

所以我宁愿看到声明为 char* newName 的参数在这两个地方(函数声明和函数定义)。它不会产生任何与编译器不同,但传递 char newName[] 外观感觉就像您的意思只是让函数临时访问 char 数组(从中复制某些内容,或向其中写入某些内容,或两者兼而有之),但实际上它通过存储使该数组成为对象的一部分它在成员变量中的地址。

这让我想起了这个程序中的另一个异常现象,那就是您存储成员变量 name作为char* ,但是地址作为 const char* 传递到构造函数中。这可能会导致额外的编译问题。我建议使用 char*在传递该字符串的所有地方进入函数,如果你想复制指针并能够稍后修改字符串的内容,或使用const char*对于构造函数中的函数参数并在 set函数,并将其存储在 const char* 中或制作字符串的新拷贝(您可以将其存储为 const char*或作为 char* )。

关于c++ - C 字符串与带有类成员函数的字符串类语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29836751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com