c ++代码类型替换失败

时间:2016-02-03 15:49:52

标签: c++ oop

我有这段代码,但用g ++或msvc编译是不可能的。我正在尝试创建一个自定义类型CharNw,我可以将其用作字符串,在现有的所有字符串例程中或作为参数传递所有现有函数:

#include <string.h>
#include <stdio.h>
void fx(unsigned int x)
{
 /*this is the reason of all this 
 but is ok,  not is problem here */
.....
}
class CharNw
{   
    int wt;
    char cr;

public:
    CharNw() { wt = -1; cr = '\0'; }
    CharNw( char c) { if wt > 0 fx( (unsigned int) wt); cr = c; }
    operator char () { if wt > 0 fx( (unsigned int) wt); return cr ;}
    assgn( int f) { wt = f;}
};
int main(void)
{
CharNw hs[40];          //it is ok
CharNw tf[] = "This is not working, Why?\n";
char dst[40];
    strcpy(dst, tf); //impossible to compile
printf("dst = %s, tf = %s", dst, tf); //too
return 0;
}

可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

逐行。

CharNw hs[40];          //it is ok

以上是CharNw个对象的数组,容量为40个元素。这很好。

CharNw tf[] = "This is not working, Why?\n";

在作业的右侧(RHS),你有一个类型char const * const* and on the left you have an array of CharNw . The CharNw`不是一个角色,所以你在这里遇到了问题。希望赋值的双方具有相同的类型。

char dst[40];

一组字符。没有更多,没有更少。它有40个字符的容量。 dst数组不是字符串。您应该优先使用#define作为数组容量。

    strcpy(dst, tf); //impossible to compile

strcpy要求两个参数都指向char。 left参数可以分解为指向数组的第一个char的指针。 tf CharNw 数组,与char数组不兼容,也不与char指针兼容。

printf("dst = %s, tf = %s", dst, tf); //too  

printf 格式说明符 %s需要指向字符的指针,最好是C-Style,nul终止的字符数组(或序列)。 tf参数是CharNw的数组,它不是字符数组,也不是指向单个字符或C样式字符串的指针。

编辑1:转化运算符
类中的方法operator char ()将字符变量转换为CharNw变量。 它不适用于指针也不适用于数组。
你需要一些凌乱的指针转换函数。

以下是一个例子:

const unsigned int ARRAY_CAPACITY = 40U;
const char text[] = "I am Sam.  Sam I am."
CharNw tf[ARRAY_CAPACITY];
for (unsigned int i = 0U; i < sizeof(text); ++i)
{
  tf[i] = text[i];  // OK, Converts via constructor.
}
for (unsigned int i = 0U; i < sizeof(text); ++i)
{
  printf("%c", tf[i]);  // The tf[i] should use the operator char () method.
}

更好的方法是使用std::basic_string声明一个类,而不是试图将您的类压缩到C-Style字符串函数中。

例如:

class StringNw : public std::basic_string<CharNw>
{
};