这是我所拥有的课程的标题和来源。还有类似的其他类,所有这些类都必须包含在一个中心类中。
但是,在下面的标题中包含文件GameObject.h
会导致错误:
error C2582: 'operator =' function is unavailable in 'Node'
虽然这个错误看起来有点模糊,但我的代码工作版本稍微偏旧,唯一的区别是Node现在继承自GameObject。
部首:
#ifndef NODE_H
#define NODE_H
#include <d3d10.h>
#include <d3dx10.h>
#include "GameObject.h"
class Mesh;
class Node : public GameObject
{
public:
Node(Mesh& mesh);
};
#endif
源:
#include "Node.h"
#include "Mesh.h"
Node::Node(Mesh& mesh) : GameObject(mesh)
{
}
在调用堆栈中,我最终指向一个节点对象向量的声明作为原因,但我不知道为什么会发生这种情况,因为还有其他对象也从gameObject继承,也在向量中。
std::vector<Node> nodes;
答案 0 :(得分:1)
但是,在下面的标题中包含文件GameObject.h会导致错误:
这意味着工作和非工作代码之间的唯一区别是包含该头文件但,
我的代码工作版略旧,唯一的区别是Node现在继承自GameObject。
这意味着还有另一个区别:Node
现在继承自GameObject
。哪个是包含导致问题的继承?
假设这是导致问题的继承,我猜你在operator=
中有一个私有的GameObject
。由于vector
喜欢复制对象,因此operator=
和GameObject
都需要Node
。
在替代方案中,您可能在GameObject
内部有一个引用,阻止编译器提供其自动赋值运算符,从而阻止Node
拥有自动赋值运算符。
总之:如果在GameObject
内,您有私有operator=
或非静态引用(如Mesh&
),那么您需要创建一个{{1要Node::operator=
使用。
参考: