-1

2 つのファイルがあり、1 つは .cpp ファイル、もう 1 つは .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*'

char* decodeCode(char* encodedString) の代わりに const char* decodeCode(const char* encodedString) を使用しています。そうしないと、文字列定数から 'char*' への非推奨の変換が行われるためです。</p>

どうすれば直せますか?もしそうなら、それをはっきりと書き留めてください(私は初心者です...)。

4

3 に答える 3

6

定義を完全に修飾し、定義の型に一致するように宣言内の型を変更する必要があります。.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*ください。動的に割り当てられたメモリを管理する負担がなくなります。

于 2012-09-04T08:58:55.163 に答える
1

関数宣言を からconst char* decodeCode(const char* encodedString) {に変更しますconst char* DecodeTheCode::decodeCode(const char* encodedString) {。このDecodeTheCode::部分は、「decodeCode()」関数が「DecodeTheCode」クラスの一部であり、他のクラスやグローバルの一部ではないことをコンパイラに伝えます。

于 2012-09-04T09:03:47.593 に答える
0

変化する

const char* decodeCode(const char* encodedString)

このように見るには:

char* DecodeTheCode::decodeCode(char* encodedString)

この方法では、新しいコードのように新しい関数の宣言と定義だけでなく、クラス メソッドの定義になります。

文字列定数から 'char*' への非推奨の変換は、メソッドの呼び出しによるものであり、宣言方法によるものではないと思います。この方法をどのように使用するかを示すことができるので、この問題を解決する方法は確実です。

于 2012-09-04T09:06:07.210 に答える