属性として文字の配列を持つクラスがあります。
class ClassA{
public:
ClassA( char *fileName );
char charArray[13][2];
};
ClassA
コンストラクターは、ファイルから 26 個の値を読み取り、次のようにロードしcharArray
ます。
ClassA::ClassA( fileName ){
ifstream file;
file.open( fileName );
int contactOne, contactTwo;
int pair=0;
while( !file.eof() ){
file >> contactOne;
file >> contactTwo;
if( !file.eof() ){
charArray[pair][0] = (contactOne+65); // convert to Alpha UpperCase
charArray[pair][1] = (contactTwo+65); // conv to Alpha UpperCase
pair++;
}
}
}
ClassA
は、オブジェクトへのポインターを含む別のクラスのコンストラクターで初期化され、 の属性として格納できるClassB
ようClassB
になります。ClassA
ClassA
ClassB
class ClassA; // forward derive
class ClassB{
public:
ClassB( char **argv );
ClassA *a_class
};
ClassB のコンストラクター:
ClassB::ClassB( argv ){
ClassA a( argv[1] );
a_class = &a;
}
ではmain
、 の関連付けをテストしていClassA
ますClassB
。forloop では、次の方法cout
ですべての値を取得charArray
します。
int main( int argc, char **argv ){
ClassB b_class( argv );
for( int i=0; i < 13; i++ ){
cout << b_class.a_class->charArray[i][0] << endl;
cout << b_class.a_class->charArray[i][1] << endl;
}
}
ClassA
の外で構築するとClassB
、cout << a.charArray[x][y];
完全に機能し、からさまざまな大文字のアルファベット記号を出力しますcharArray
。
実際、コンストラクターにcout << a.charArray[x][y];
ステートメントを追加してコンストラクターを使用しClassA
て初期化しても、正しい値が に読み込まれ、大文字のアルファベット記号が出力されます。ClassA
ClassB
charArray
しかし、メインにあるものを実行すると、からの出力charArray
は非常に奇妙です。配列の最初のいくつかの値は予想どおりですが、最後の値は多少ランダムで、通常はランダムに配置された空白の値と疑問符です。あたかもポインタがロードされた値をcharArray
正しい範囲から外したか、何らかの形で間違ったメモリ位置にアクセスしているかのようです。
どんな助けでも大歓迎です。私ClassA
は奇妙な方法でアクセスしていますか?あるクラスの属性として他のクラスを持つ好ましい方法はありますか?
異常な出力:
A
E
B
J
C
M
D
Z
?
?
?
y
通常の出力:
A
E
B
J
C
M
D
Z
F
L
G
Y
H
X
I
V
K
W
N
R
O
Q
P
U
S
T