包含"random"值的类的数组属性(通过另一个类的指针访问时)
Array attribute of class containing "random" values when accessed via a pointer from another class
我有一个类,它有一个字符数组作为属性。
class ClassA{
public:
ClassA( char *fileName );
char charArray[13][2];
};
ClassA
构造函数从文件中读取26个值并加载它们以如下方式转换为CCD_ 2。
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 I cout
中,CCD_。
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;
}
}
当我在ClassB
之外构造ClassA
时,cout << a.charArray[x][y];
可以完美地工作,从charArray
输出各种大写字母符号。
事实上,即使我将cout << a.charArray[x][y];
语句添加到ClassA
构造函数中,并使用charArray
1构造函数初始化ClassA
,也会将正确的值加载到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
ClassA a( argv[1] );
将a
定义为一个局部变量,该变量在从ClassB
构造函数退出时将被销毁,并且其内存将变为无效,从而使a_class
指向垃圾。
由于a_class
需要更长的使用寿命,因此必须使用new ClassA(argv[1]);
并确保其为delete
d。我建议查看std::unique_ptr
。
但是
为什么首先要这样做?相反,由于ClassA
不依赖于ClassB
,因此可以在定义ClassB
之前正式定义ClassA
或包括其头文件。然后你可以删除正向定义和:
class ClassB{
public:
ClassB( char **argv );
ClassA a_class
};
ClassB::ClassB( argv ):a_class(argv[1]){
}
让整个指针混乱消失。
脱离主题:
while( !file.eof() )
及其同类产品几乎永远不会像你预期的那样工作。在这里阅读更多:为什么循环条件中的iostream::eof被认为是错误的?
while( file >> contactOne >> contactTwo ){
charArray[pair][0] = (contactOne+65); // convert to Alpha UpperCase
charArray[pair][1] = (contactTwo+65); // conv to Alpha UpperCase
pair++;
}
应该做你需要做的事。
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 修改函数中的指针(将另一个指针作为参数传递)
- 如何将指针从一个void函数传递到另一个C++
- 如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
- 将指针分配给另一个指针时会发生什么情况?
- 将指向给定子类的指针从一个向量复制到另一个向量
- C++将一个指针分配给另一个指针时执行的类型检查
- 将一个类的方法指针存储到另一个类中
- 是否可以使用智能指针成员设置具有另一个结构的结构?
- 初始化类中的指针数组,并在另一个类中检索它
- 从另一个指针指向函数的指针
- 使用指向成员函数的指针在另一个类中调用类构造函数
- 我正在尝试将表的地址传递给要在另一个函数中使用的指针,但得到不兼容的指针类型
- 无法将指向类的成员函数的函数指针作为参数传递给同一类的另一个成员函数
- 无法"this"指针传递到另一个类并在 CPP 中调用该类的任何方法
- 如果类"A"具有指向另一个类的指针,则"B" A 可以访问 B 类公共方法
- 如何使用指针从另一个类访问属性
- 如何从另一个嵌套类中调用某个封闭类的嵌套类的函数指针成员的值?
- C++ 无效双指针干扰另一个
- 两个抽象类,派生自同一个基类.如何访问从一个抽象类到另一个抽象类的指针