繁体   English   中英

从头文件调用Cpp函数

[英]Cpp function call from header file

有两个文件,一个是.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 * encodeCode(const char * encodeString)代替char * decodeCode(char * encodedString),因为否则我不赞成将其从字符串常量转换为'char *'

您知道我该如何解决吗? 如果是这样,请清楚地写下来(我是新手...)。

您需要完全限定定义并更改声明中的类型以匹配定义类型。 .cpp文件中,这仅定义了一个自由函数:

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

并且不与成员函数声明关联。 要完全符合条件:

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

还要更改decodeCode()声明中的类型。

更重要的是,您将返回一个指向名为store的局部变量的指针。 这将超出范围,并给调用方留下一个悬空的指针。 要返回char*您需要使用new char[size]动态分配内存,并且调用方必须记住要delete[]返回的数据。 如果返回动态分配的内存,则返回类型无需更改为const char* 但是您必须保持一致,特别是不要在偶然的情况下返回字符串文字,例如"" ,而在其他情况下不要返回动态分配的内存,否则调用者将试图delete[]它不应该使用的delete[]内存。

如果可能,请使用std::string代替char* 它减轻了您管理动态分配的内存的负担。

将函数声明从const char* decodeCode(const char* encodedString) {更改为const char* DecodeTheCode::decodeCode(const char* encodedString) { DecodeTheCode::部分告诉编译器'decodeCode()'函数是'DecodeTheCode'类的一部分,而不是某些其他类甚至是全局类的一部分。

更改

const char* decodeCode(const char* encodedString)

看起来是这样的:

char* DecodeTheCode::decodeCode(char* encodedString)

这样,它是一个类方法定义,而不仅仅是新代码中的新函数声明和定义。

我相信,从字符串常量到'char *'的弃用转换来自您的方法调用,而不是您声明它的方式。 您可以展示如何使用此方法,以便确定如何解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM