有两个文件,一个是.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 *'
你知道我怎么解决它吗?如果是这样,请清楚地写下来(我是新手......)。
答案 0 :(得分:6)
您需要完全限定定义并更改声明中的类型以匹配定义类型。在.cpp
文件中,这只定义了一个自由函数:
const char* decodeCode(const char* encodedString)
{
}
并且与成员函数声明无关。完全符合条件:
const char* DecodeTheCode::decodeCode(const char* encodedString)
{
}
同时更改decodeCode()
声明中的类型。
更重要的是,您将返回一个指向名为store
的局部变量的指针。这将超出范围并使调用者留下悬空指针。要返回char*
,您需要使用new char[size]
动态分配内存,并且调用者必须记住delete[]
返回的数据。如果返回动态分配的内存,则返回类型不需要更改为const char*
。但是你必须保持一致,特别是不要在occassion上返回一个字符串文字,如""
,而在另一个返回动态分配的内存,否则调用者将尝试delete[]
内存不应该。
如果可能,请使用std::string
代替char*
。它消除了管理动态分配的内存的负担。
答案 1 :(得分:1)
将功能声明从const char* decodeCode(const char* encodedString) {
更改为const char* DecodeTheCode::decodeCode(const char* encodedString) {
。 DecodeTheCode::
部分告诉编译器'decodeCode()'函数是'DecodeTheCode'类的一部分,而不是某个其他类的一部分甚至是全局的。
答案 2 :(得分:0)
更改
const char* decodeCode(const char* encodedString)
这样看:
char* DecodeTheCode::decodeCode(char* encodedString)
这样它就是一个类方法定义,而不仅仅是新代码中的新函数声明和定义。
从字符串常量到'char *'的不推荐的转换来自您的方法调用,我相信,不是来自您声明它的方式。您可以展示如何使用此方法,以便我确定如何解决此问题。