我有这段代码,但用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;
}
可以帮帮我吗?
答案 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>
{
};