修改自己类的本地实例
Modify a local instance of own class
我有一个类,其中一个私人属性是该类的实例。在Java(因为我习惯了Java),这看起来像:
class Node {
private Node Pi;
}
现在,我正在用C 写这篇文章,当我尝试做同样的事情时,我会得到一个红色下划线(我正在使用Visual C 2010 Express),"不允许使用不完整的类型"。
class Node {
private:
Node Pi; //Incomplete type is not allowed
};
我尝试通过将其更改为Node Pi(void);
来解决此问题,但是为什么我尝试使用另一个修改此属性的函数,我得到的"表达式必须是可修改的lvalue"。
class Node {
private:
Node Pi(void);
public:
void setPi(Node n);
};
void Node::setPi(Node n) {
Pi = n; //Node Node::Pi() expression must be a modifiable lvalue
}
通常在Java中没有问题,所以我的问题是,我该如何实施?我不是C 的初学者,但是我已经有一段时间没有写了。
class Node {
private Node Pi;
void setPi(Node n) {
this.Pi = n;
}
}
将 Pi
变成参考或指向Node
的指针。
- 参考(
Node& Pi
)将导致语法更好,但不能无效,必须在构造时初始化,并且不能更改以参考其他对象。 - 指针(
Node* Pi
)将需要较少的漂亮语法,但可以为null,并且可以在不同时间指向不同的对象。
有关更多详细信息,请参阅C ?
尝试以下操作:(将指针直接发送到对象而不是类对象)
)class Node {
private:
Node* Pi(void);
public:
void setPi(Node* n);
};
void Node::setPi(Node* n) {
Pi = n; //Node Node::Pi() expression must be a modifiable lvalue
}
java'自动魔法'将这些对象转换为C ,您必须自己做。
java的语法隐藏了它在各处使用指针的事实。在C 中,您必须明确使用指针语法才能模仿Java:
// Java
class Node {
private Node Pi; // This is actually a pointer
}
// C++
class Node {
private:
Node *Pi; // So you use a pointer in C++ too
};
更改以下代码:
class Node {
private:
Node Pi; //Incomplete type is not allowed
};
to:
class Node {
private:
Node* Pi;
};
相关文章:
- 从C++实例化QML
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 如何在c++中为模板函数实例创建快捷方式
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 设计一个只能由特定类实例化的类(如果可能的话,通过make_unique)
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- 我创建了自己的智能指针类,我用这个智能指针指向一个类实例,如何正确返回智能指针
- 错误:"Class"在其自己的定义中隐式实例化。C++11
- Python 可以运行脚本的多个实例,每个实例都包含自己的数据吗?
- 实例是否应该使用资源库/获取器来访问自己的私有数据成员
- 修改自己类的本地实例
- 同一个c++类的所有实例共享一个vtable,或者每个实例都有自己的vtable
- 一个类不能有自己的静态 constexpr 成员实例吗?
- 如何克隆自己的实例,就像Chromium一样
- 如何用自己的类型实例化超类模板
- 如何在c++程序中使用自己的GObject实例
- 平等对阶级来说是自反的吗?(例如,实例总是等于它们自己吗?)
- 向自己的实例发出信号不起作用
- 如何在C++中将自己的类或超类设置为实例