我有一个Deck类的对象,其中包含一个指向另一个类的对象的指针的动态分配数组,游戏卡。我试图超载< <运算符(作为Deck类的朋友),以迭代方式输出Deck对象中每张牌的细节。目前超负荷的定义是这样的:C++ - 取消引用是数组元素的指针?
ostream& operator<< (ostream& out, const Deck& d)
{
PlayingCard** pCards = d.getPlayingCards();
for(int i = 0; i < d.getTotalCards(); ++i)
{
out << pCards[i] << endl;
// the << operator is also overloaded in the PlayingCard class to take PlayingCard objects as arguments.
// the overload in the PlayingCard class definitely works.
}
return out;
}
当试图构建一个甲板对象,并输出其信用卡细节,它输出的内存地址,而不是实际的数据列表,所以我想我需要取消引用pCards [一世]。但是,当我尝试这样做时,输出是垃圾,最终在调试器中遇到访问冲突。我已经尝试了所有的以下连击的,但所有导致无论是在编译时或运行时的问题:
*pCards[i], pCards[i]*, (*pCards[i]), *(pCards[i])
是解引用指针数组内的是这只是不正确的语法,还是有更深层次的东西我在这里不理解?我该如何重写这段代码,以便程序输出由这些PlayingCard对象保存的实际数据,而不仅仅是内存地址?
问题可能是在getPlayingCards ... – 2012-02-04 20:52:46
你有没有使用迭代容器比如std :: vector的或std ::设置,而不是考虑。至少你可以通过这种方式获得集合的开始迭代器的getter,并且只需迭代 - 至少这样你就不用担心指针了(当然,这对于可用性有一定的假设更好的是,您还可以使用Visitor设计模式遍历PlayingCard对象的集合,在Deck对象中保留遍历逻辑... –
hatboyzero
2012-02-04 21:01:26