我有一个具有字符数组作为属性的类。
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;
}
in main
,我正在测试ClassA
in的关联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
但是,当我执行 main 中的内容时,输出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