无法访问对象中的指针

时间:2019-01-24 04:52:58

标签: c++

#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个字节的内存。

2 个答案:

答案 0 :(得分:6)

reinterpret_cast返回具有重新解释类型的指针。

例如

char* c = new char[64];
object* o = reinterpret_cast<object*>(c);
o->Next;

c的类型一旦声明就不能更改。在上面的示例中,co指向同一位置,但是oobject*,因此o->Next是有效的。

您还需要公开Next,然后才能从成员函数外部对其进行访问。

class object{
public:
    object* Next;
};

值得注意的是,上面的示例导致未定义的行为,因为您实际上并未将任何数据放入c所指向的内存中。 o->Next将是垃圾值。

答案 1 :(得分:4)

根据Wikipedia

  

(默认情况下,对类成员的访问是私有的)。班级外部无法访问私人成员;它们只能通过类的方法进行访问。公共成员构成了班级的界面,可以在班级外部访问。

还有tutorialspoint

  

默认情况下,一个类的所有成员都是私有成员,例如,在以下类中,宽度是私有成员,这意味着在标记成员之前,将假定该成员为私有成员

意味着,如果要访问类外部的数据成员,则需要将其访问修饰符设置为public。

class object{
public:
    object* Next;
};

或者,您也可以做一个吸气剂

class object{
    object* Next;
public:
    object* getNext() {
        return Next;
    }
};

然后访问它:

c->getNext();

编辑:我刚刚意识到,您得到的错误不是由于调用私人成员。因此,您可以忽略该错误。也就是说,除非您没有发布完整的代码并且已经知道这一点,否则您可能仍要提防这一点。