我有一个带参数char*
的构造函数(只有数字),我想做一个简单的数学运算。我想将新参数添加到构造函数int[]
/ int*
以使其更容易。
头:
class BigNum {
char *value;
int* arr;
public:
BigNum(char*, int * = 0) {};
BigNum();
};
CPP:
BigNum::BigNum(char* value, int *tab){
int length = sizeof(value) / sizeof(char*);
for (int i = 0; i < length; i++) {
arr[i] = value[i];
}
}
我可以这样做吗?它甚至没有编译。
我可以对此示例进行更改char*
更改为int
。
答案 0 :(得分:1)
它甚至没有编译
它没有编译,因为你已经定义了BigNum(char*, int *)
两次。一旦进入标题,然后进入源文件。
解决方案:仅定义构造函数一次。额外提示:当程序没有编译时,编译器会在诊断消息中告诉你原因。
这不符合你的想法:
int length = sizeof(value) / sizeof(char*);
length
始终为1,因为value
的类型为char*
。我怀疑你的意图是value
指向一个数组,你想要计算该数组的长度。好吧,不可能从指针到该数组的元素计算数组的长度。
解决方案:您必须a)传递数组的长度作为参数或b)指定数组必须是终止字符串,在这种情况下,您可以通过迭代字符串来计算长度,直到找到终止字符
您无需初始化arr[i]
arr
arr[i] = value[i];
行为未定义。
解决方案:你必须分配一个数组。
我可以对此示例将char *更改为int。
这取决于您想要如何更改它。如果要将指向的字符数字转换为int
,则可以使用在所有本机字符编码(C ++支持)中数字都必须是连续的这一事实。从这个事实,我们知道从0
字符的值中减去数字字符的值,我们得到数字字符代表的数值:
char* c = address_of_some_digit;
int value_of_digit = '0' - *c;