提问人:Robert Michael Watson 提问时间:9/5/2022 最后编辑:Vlad from MoscowRobert Michael Watson 更新时间:9/5/2022 访问量:129
访问头文件 C++ [复制] 中的数组
Access array in header file C++ [duplicate]
问:
我有一个对象房间,每个房间都有 4 个对其他房间的引用
头文件:
namespace test
{
class Room
{
public:
Room* references[4];
void Connect(Room roomReference) const;
}
}
在我的 cpp 文件中,我试图通过在引用中插入指向特定索引的房间指针来附加该引用。但是,我收到以下编译器错误“无法分配给只读类型 Room* const”。但是当我创建一个相同类型的局部变量并插入其中时,它就可以工作了。
void Room::Connect(Room roomReference) const
{
Room* roomReferenceItem = &roomReference;
Room* foos[4];
// This works
foos[2] = roomReferenceItem;
// This does not
this->references[2] = roomReferenceItem;
}
我不确定我对C++中的全局数组是否存在一些误解
答:
5赞
Vlad from Moscow
9/5/2022
#1
您声明了一个常量成员函数
void Connect(Room roomReference) const;
因此,您不能更改类的数据成员,因为在这种情况下,指针的定义类似于 。this
const Room *
从函数声明中删除限定符。const
此外,您必须通过引用函数来传递该类型的对象,例如Room
void Connect(Room &roomReference);
否则,存储在数组中的指针将无效,因为它们将在退出函数后指向非活动的临时对象。references
评论
0赞
Robert Michael Watson
9/5/2022
我的救命恩人!我花了太多时间在这上面。谢谢!
0赞
john
9/5/2022
@RobertMichaelWatson 我想知道的是,为什么你首先将函数声明为 const。通常,我们看到初学者没有将本应是 const 的函数声明为 const,而不是相反。
0赞
Robert Michael Watson
9/6/2022
哈哈咕噜咕噜的问题。实际上是 Resharper for C++ 建议我切换它
2赞
Pete Becker
9/5/2022
#2
数组不是全局的,但这不是问题所在。 ,因此无法修改 的内容。所以去掉.然后问题是,当函数返回时,该对象将消失,因此存储指向它的指针不会完成任何好事。将其更改为 。Room::Connect
const
references
const
roomReference
Room& roomReference
评论
Connect
const
roomReference