#include <iostream>
using namespace std;
class object{
object* Next;
};
int main()
{
char* c = new char[64];
reinterpret_cast<object*>(c);
c->Next;
return 0;
}
为什么会出现错误
main.cpp:21:8: error: request for member ‘Next’ in ‘* c’, which is of non-class type ‘char’
即使将分配的内存转换为对象类型时,当我尝试访问Next指针时,该怎么办?如何访问下一个指针?
我只使用char类型,因为我想分配64个字节的内存。
答案 0 :(得分:6)
reinterpret_cast
返回具有重新解释类型的指针。
例如
char* c = new char[64];
object* o = reinterpret_cast<object*>(c);
o->Next;
c
的类型一旦声明就不能更改。在上面的示例中,c
和o
指向同一位置,但是o
是object*
,因此o->Next
是有效的。
您还需要公开Next
,然后才能从成员函数外部对其进行访问。
class object{
public:
object* Next;
};
值得注意的是,上面的示例导致未定义的行为,因为您实际上并未将任何数据放入c
所指向的内存中。 o->Next
将是垃圾值。
答案 1 :(得分:4)
根据Wikipedia:
(默认情况下,对类成员的访问是私有的)。班级外部无法访问私人成员;它们只能通过类的方法进行访问。公共成员构成了班级的界面,可以在班级外部访问。
默认情况下,一个类的所有成员都是私有成员,例如,在以下类中,宽度是私有成员,这意味着在标记成员之前,将假定该成员为私有成员
意味着,如果要访问类外部的数据成员,则需要将其访问修饰符设置为public。
class object{
public:
object* Next;
};
或者,您也可以做一个吸气剂
class object{
object* Next;
public:
object* getNext() {
return Next;
}
};
然后访问它:
c->getNext();
编辑:我刚刚意识到,您得到的错误不是由于调用私人成员。因此,您可以忽略该错误。也就是说,除非您没有发布完整的代码并且已经知道这一点,否则您可能仍要提防这一点。