来自头文件的Cpp函数调用

时间:2012-09-04 08:57:09

标签: c++ compiler-errors header-files

有两个文件,一个是.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 *'

你知道我怎么解决它吗?如果是这样,请清楚地写下来(我是新手......)。

3 个答案:

答案 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 *'的不推荐的转换来自您的方法调用,我相信,不是来自您声明它的方式。您可以展示如何使用此方法,以便我确定如何解决此问题。