从char *到int [] / int *的C ++构造函数

时间:2017-12-16 14:41:07

标签: c++ casting char

我有一个带参数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

1 个答案:

答案 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;