为什么包含此标头导致此错误?

时间:2011-12-02 17:55:23

标签: c++

这是我所拥有的课程的标题和来源。还有类似的其他类,所有这些类都必须包含在一个中心类中。

但是,在下面的标题中包含文件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;

1 个答案:

答案 0 :(得分:1)

  

但是,在下面的标题中包含文件GameObject.h会导致错误:

这意味着工作和非工作代码之间的唯一区别是包含该头文件

  

我的代码工作版略旧,唯一的区别是Node现在继承自GameObject。

这意味着还有另一个区别:Node现在继承自GameObject。哪个是包含导致问题的继承?

假设这是导致问题的继承,我猜你在operator=中有一个私有的GameObject。由于vector喜欢复制对象,因此operator=GameObject都需要Node

在替代方案中,您可能在GameObject内部有一个引用,阻止编译器提供其自动赋值运算符,从而阻止Node拥有自动赋值运算符。

总之:如果在GameObject内,您有私有operator=或非静态引用(如Mesh&),那么您需要创建一个{{1要Node::operator=使用。

参考