一切都很好,直到我将对象移动到命名空间.现在编译器声称我的Color属性是私有的.
我认为朋友的全部意义是与那些阶级朋友分享封装信息.
Color.h
friend ostream & operator << (ostream& output, const st::Color& color);
Run Code Online (Sandbox Code Playgroud)
Color.cpp:
ostream & operator <<(ostream& output, const st::Color& color) {
output << "Colors:\nalpha\t: " << color.a << "\nred\t: " << color.r << "\ngreen\t: " << color.g
<< "\nblue\t: " << color.b << "\nvalue\t: " << color.color();
return output;
}
Run Code Online (Sandbox Code Playgroud)
错误:
Color.h||In function 'std::ostream& operator<<(std::ostream&, const st::Color&)':|
Color.h|52|error: 'unsigned char st::Color::a' is private|
Color.cpp|15|error: within this context|
Color.h|49|error: 'unsigned char st::Color::r' is private|
Color.cpp|15|error: within this context|
Color.h|51|error: …Run Code Online (Sandbox Code Playgroud) 我有一个相当简单的问题; 我有包含指向对象的指针的数组.我有时会从这些数组中创建变异数组,并且只在方法中使用它们.向后我不需要它们.在这种情况下,我不希望在我继续使用原始数据时销毁指向的数据.我不完全理解的是在我的临时数组中创建的指针(不是数据本身,而是指针)会发生什么?内存如何处理它们.据我所知,指针只能指向一个地址.你不能"删除"它们.
谁可以给我更多的见解?这段时间我觉得我在做记忆错了.
在这种情况下,list是我的"bag",它是数组实现的对象包装器.但是,由于它包含索引之间的gabs,我使用getGapless来获取排除nullptr索引的包.
我最后删除了我的包,但它没有删除实际内容(用不同的方法完成).
那么当我的"玩家"包中的指针何时超出范围?
virtual void processEntities(artemis::ImmutableBag<artemis::Entity*>& bag)
{
artemis::Bag<artemis::Entity*> * list = (artemis::Bag<artemis::Entity*>*)this->world->getGroupManager()->getEntities("HUMAN");
if(list == nullptr) return;//Kill function
artemis::Bag<artemis::Entity*> * players = list->getGapless();
for(int i=0; i<players->getCount(); i++)
{
for(int j=i+1; j < players->getCount(); j++)
{
if(intersects(*players->get(i),*players->get(j))){
std::cout << "Collide YEAH \n";
}
}
}
delete players;
}
Run Code Online (Sandbox Code Playgroud)