По строкам.
CharNw hs[40]; //it is ok
выше представляет собой массив объектов CharNw
с мощностью 40 элементов. Это хорошо.
CharNw tf[] = "This is not working, Why?\n";
С правой стороны (РИТ) выполнения задания, у вас есть тип 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
. Левый параметр можно разложить на указатель на первый массив char
. tf
представляет собой массив CharNw
, который несовместим с массивом char
или указатель к char
.
printf("dst = %s, tf = %s", dst, tf); //too
printf
спецификатор формата%s
требует указатель на символ, предпочтительно С-типа, завершенную нулем массив (или последовательность) символов. Параметр tf
представляет собой массив из CharNw
, который не является массивом символов или указателем на один символ или строку C-Style.
Edit 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>
{
};
Используя правильный синтаксис будет хорошим первым шагом. Этот код - мусор. – LogicStuff
У вас нет ничего, что преобразует * указатель на char * в массив 'CharNw'. –
Это звучит как проблема XY. Зачем вам это нужно? – NathanOliver