コードには多くの場所があり、それ以上の操作を行う前に修正する必要があります。
命名規則はひどいです。a
、b
、とは何c
ですか?
ループインデクサーとして使用b
しますが、代わりにローカル変数を使用する必要があります。
あなたは私たちに見せてくれません a
。どこに割り当てられますか?が指すメモリのサイズはa
?
コードは次のようになるはずです。
class InitLine
{
private:
char * data;
int count;
public:
InitLine(char * newData, int newCount)
{
// Possible error checking?
data = newData;
count = newCount;
}
// No parameters needed here, I guess
void Init()
{
for (int i = 0; i < count; i++)
data[i] = 0;
}
};
あなたの質問に関しては、あなたが何を達成しようとしているのか、何を知りたいのか、よくわかりません。任意のタイプの配列を保持するジェネリック クラスを作成する場合は、テンプレートを使用する必要があります。
template <typename T>
class InitLine
{
private:
T * data;
int count;
public:
InitLine(T * newData, int newCount)
{
// Possible error checking?
data = newData;
count = newCount;
}
// No parameters needed here, I guess
void Init()
{
for (int i = 0; i < count; i++)
data[i] = 0;
}
};
このクラスを次のように使用する必要があります。
InitLine<char> line(myData, myDataSize);
// where myData is a char * and myDataSize is an int
パラメータが異なるいくつかのメソッドを記述したい場合、この手法はメソッドのオーバーロードと呼ばれ、C++ で利用できます。
void Init(char * a, int b) { /* sth */ }
void Init(int * a, int b) { /* sth */ }
コンパイラは、どのメソッドを呼び出す必要があるかを明確に区別できなければならないことに注意してください。例えば。
void Test(int a) { }
void Test(char a) { }
Test(0); // Ambiguity: which method should be called?
これらは、あなたの質問を読んでいるときに頭に浮かぶことだけです。それが求めているものではない場合は、質問を編集してより具体的にすることを検討してください。