1

さて、これは私を困惑させました。文字配列の配列をクラスのコンストラクターに渡そうとしています。このクラスには、文字配列の配列へのポインターを格納するプライベート属性があります。その後、クラスはポインタを介して配列を処理できます。

以下は、目的の機能を示すコードです。しかし、それはコンパイルされません。このコードを修正して機能させるにはどうすればよいですか?

using namespace std;

const int MAX_LINES = 10, MAX_STRING = 80;

class Alphabetizer{
    public:
        Alphabetizer(char * inArray[][MAX_STRING]) : input(inArray){};

    private:
        char * input[MAX_LINES][MAX_STRING];
};

int main(){
    char charArray[MAX_LINES][MAX_STRING];
    Alphabetizer theAlaphBet(charArray);
    return 0;
}
4

5 に答える 5

3

C 互換の文字ポインタを使用することに固執している場合はchar **、 の型としてa を使用することをお勧めしますinput。これは、(少なくとも C では) これを行う通常の方法であり、最大文字列サイズを定義する必要がないという追加の利点があります。

他の人が指摘しているように、std::string代わりに を利用できます。これは全体的により良い選択かもしれません.

于 2012-11-06T04:35:07.263 に答える
0

std::stringここで最も適切です!文字列と文字配列を十分に処理します!

于 2012-11-06T04:29:53.133 に答える
0

コンパイル エラーを見ずに判断するのは困難ですが、問題は次の行にある可能性があります。

Alphabetizer theAlaphBet(charArray);

アドレスではなく、配列を直接渡しています。それは読むべきです:

Alphabetizer theAlaphBet( &charArray );

ただし、物事を複雑にしすぎている可能性があると思います。ポインターではなく参照を使用する方がよい場合があります

const int MAX_LINES = 10, MAX_STRING = 80;

class Alphabetizer{
    public:
        Alphabetizer(char & inArray[][MAX_STRING]) : input(inArray){};

    private:
        char & input[MAX_LINES][MAX_STRING];
};

int main(){
    char charArray[MAX_LINES][MAX_STRING];
    Alphabetizer theAlaphBet(charArray);
    return 0;

}

コードを簡素化するのに役立つ可能性があるため、代わりに std::string の使用を検討することもできます。

于 2012-11-06T12:59:56.027 に答える
0

へのポインターを渡しているのではなく、 を渡しているのだと思いchar[][]ますchar[][]

std::stringまた、 char 配列の代わりに使用する必要があります。

于 2012-11-06T04:27:55.800 に答える
0

コードのエラーはほとんどありません。Alphabetizer オブジェクト内からメイン関数の charArray を参照しようとしていると思います。その場合は宣言

char * input[MAX_LINES][MAX_STRING];

上記の宣言は入力を ((char*) の MAX_STRING の配列) の MAX_LINE の配列にするため、間違っています。要約すると、入力は配列であり、配列へのポインターではありません。あなたがそれをポインターにするつもりだった場合-これはあなたのコードの残りの部分が私に示唆しているものです-次に、次のことを行う必要があります。

const int MAX_LINES = 10, MAX_STRING = 80;

class Alphabetizer{
    public:
        Alphabetizer(char ((*ar)[MAX_LINES])[MAX_STRING]) : m_ar(ar){};

    private:
        char ((*m_ar)[10])[80];
};

int main(){
    char charArray[MAX_LINES][MAX_STRING];
    char ((*ar)[MAX_LINES])[MAX_STRING] = &charArray;
    Alphabetizer theAlaphBet(&charArray);
    return 0;
}

さらにやって、

input(inArray)

次のことを行うのと同等であるため、間違っています。

char a[1] = {'a'};
char b[1] = {'p'};
a = b;

配列を別の配列に割り当てても、配列が別の配列にコピーされることはありません。明示的に memcpy を実行する必要があります。(このセマンティクスは、c または c++ では意味がありません)

于 2012-11-06T06:20:57.833 に答える