Вызов функции Cpp из заголовочного файла

Есть два файла, один файл .cpp, другой файл .h, заголовочный файл

Этот класс присутствует в .h файле

class DecodeTheCode
{
public:
char* decodeCode(char* encodedString);
};

Теперь программное обеспечение, которое я использую, спрашивает

• Реализуйте свою логику в функции char * decodeCode (char * encodedString)

но я объявил

const char* decodeCode(const char* encodedString)
{
const char*  decodedString = "";
const char* a = encodedString;
char store[10000];

for(int j=0;j<strlen(a);j++)
{
if (isdigit(a[j]) || a[j] == '#')
continue;
else return "";
}
int i = 0,k=0;
while (i < strlen(a))
{
if (a[i] == '#') {i++; continue;}
else if(a[i] == a[i+1] && a[i+1] == a[i+2] && a[i+2] == a[i+3])
{
store[k++] = four(a[i]);
i += 4;
}
else if (a[i] == a[i+1] && a[i+1] == a[i+2])
{
store[k++] = three(a[i]);
i += 3;
}
else if (a[i] == a[i+1])
{
store[k++] = two(a[i]);
i += 2;
}
else
{
store[k++] = one(a[i]);
i++;
}
}
store[k]='\0';
decodedString=store;              // line number 103
return  decodedString;

}

в .cpp файле

теперь программное обеспечение показывает

Error(s) encountered:
C:/Users/ADMINI~1/AppData/Loca/Temp/cco5baaa.o(.text+0x18f):TestDecodeTheCode.cpp:undefined reference to
DecodeTheCode::decodeCode(char*)'
C:/Users/ADMINI~1/AppData/Local/Temp/cco5baaa.o(.text+0x1a4):TestDecodeTheCode.cpp: undefined reference to `DecodeTheCode::decodeCode(char*)'
C:/Users/ADMINI~1/AppData/Local/Temp/cco5baaa.o(.text+0x24d):TestDecodeTheCode.cpp: undefined reference to `DecodeTheCode::decodeCode(char*)'
C:/Users/ADMINI~1/AppData/Local/Temp/cco5baaa.o(.text+0x262):TestDecodeTheCode.cpp: undefined reference to `DecodeTheCode::decodeCode(char*)'
C:/Users/ADMINI~1/AppData/Local/Temp/cco5baaa.o(.text+0x30b):TestDecodeTheCode.cpp: undefined reference to `DecodeTheCode::decodeCode(char*)'
C:/Users/ADMINI~1/AppData/Local/Temp/cco5baaa.o(.text+0x320):TestDecodeTheCode.cpp: more undefined references to `DecodeTheCode::decodeCode(char*)' follow

collect2: ld вернул 1 статус выхода

/decodethecode/decodethecode.c: In function `char* decodeCode(const char*)':
/decodethecode/decodethecode.c:103: error: invalid conversion from `const char*' to `char*'

я использую
const char * decodeCode (const char * encodedString)
на месте
char * decodeCode (char * encodedString)
потому что в противном случае я получаю устаревшее преобразование из строковой константы в ‘char *’

Ты хоть представляешь, как я могу это исправить? Если так, пожалуйста, запишите это ясно (я новичок …).

-1

Решение

Вам необходимо полностью определить определение и изменить типы в объявлении, чтобы они соответствовали типам определения. в .cpp Файл это просто определяет свободную функцию:

const char* decodeCode(const char* encodedString)
{
}

и не связан с объявлением функции-члена. Для полной квалификации:

const char* DecodeTheCode::decodeCode(const char* encodedString)
{
}

Измените типы в объявлении decodeCode() также.

Что еще более важно, вы возвращаете указатель на локальную переменную с именем store, Это выйдет из области видимости и оставит вызывающего указателя. Чтобы вернуть char* вам нужно динамически распределять память, используя new char[size] и абонент должен помнить delete[] возвращенные данные. Тип возврата не нужно менять на const char* при возврате динамически выделенной памяти. Но вы должны быть последовательны, в частности, не возвращать строковый литерал, например, ""и при другом возврате динамически выделенной памяти, иначе вызывающая сторона будет пытаться delete[] Память не должна.

Если возможно, используйте std::string вместо char*, Это снимает с вас бремя управления динамически выделяемой памятью.

6

Другие решения

Измените объявление функции с const char* decodeCode(const char* encodedString) { в const char* DecodeTheCode::decodeCode(const char* encodedString) {, DecodeTheCode:: part сообщает компилятору, что функция decodeCode () является частью класса DecodeTheCode, а не частью какого-либо другого класса или даже глобального.

1

+ Изменить

const char* decodeCode(const char* encodedString)

выглядеть так:

char* DecodeTheCode::decodeCode(char* encodedString)

Таким образом, это определение метода класса, а не просто объявление и определение новой функции, как в вашем новом коде.

Я считаю, что устаревшее преобразование из строковой константы в ‘char *’ происходит из-за вашего вызова метода, а не из-за того, как вы его объявляете. Вы можете показать, как вы используете этот метод, чтобы я был уверен, как решить эту проблему.

0
По вопросам рекламы [email protected]