在 C++ 的构造函数中初始化 c 数组时出错
error in initializing the c-array in the constructor in c++
这是我的代码,我在构造函数中初始化 char 数组时出错。我也曾尝试用字符串初始化它,但都是徒劳的。良好的帮助将不胜感激。
#include <iostream>
using namespace std;
class employe
{
char name[30];
int id;
public:
employe(int a, char b[30] ) :id(a), name(b)
{
}
char getid()
{
return name;
}
};
问题是当一个数组被传递给一个函数(并且构造函数只是一个函数)时,它会衰减指向它的第一个元素的指针。
这意味着构造函数中的参数 b
实际上是一个 指针 (类型 char*
),并且您不能从指针。
最简单的解决方案是从指针复制到构造函数体内的数组:
// Copy the string from b to name
// Don't copy out of bounds of name, and don't copy more than the string in b contains (plus terminator)
std::copy_n(b, std::min(strlen(b) + 1, sizeof name), name);
更好 的解决方案是对字符串使用 std::string
,然后您可以像现在尝试的那样进行初始化。
这是我的代码,我在构造函数中初始化 char 数组时出错。我也曾尝试用字符串初始化它,但都是徒劳的。良好的帮助将不胜感激。
#include <iostream>
using namespace std;
class employe
{
char name[30];
int id;
public:
employe(int a, char b[30] ) :id(a), name(b)
{
}
char getid()
{
return name;
}
};
问题是当一个数组被传递给一个函数(并且构造函数只是一个函数)时,它会衰减指向它的第一个元素的指针。
这意味着构造函数中的参数 b
实际上是一个 指针 (类型 char*
),并且您不能从指针。
最简单的解决方案是从指针复制到构造函数体内的数组:
// Copy the string from b to name
// Don't copy out of bounds of name, and don't copy more than the string in b contains (plus terminator)
std::copy_n(b, std::min(strlen(b) + 1, sizeof name), name);
更好 的解决方案是对字符串使用 std::string
,然后您可以像现在尝试的那样进行初始化。