我有一个类RenderMachine
,其中包含RenderObject
,反之亦然。我知道关于这个错误有很多问题,但是解决方案没有任何作用。
他们说错误主要是因为包含循环,但我没有,因为在 RenderObject header 中我只为指向 RenderMachine 的指针分配内存,反之亦然。
RenderObject.h
#pragma once
#include "RenderMachine.h"
class RenderObject
{
public:
RenderObject(RenderMachine* rm){}
};
RenderMachine.h
#pragma once
#include "RenderObject.h"
class RenderMachine
{
public:
void add(RenderObject* renderObject);
};
确切的错误是
error: expected ‘)’ before ‘*’ token
RenderObject(RenderMachine* rm)
^
编辑:
#include "RenderMachine.h"
class RenderMachine;
class RenderObject : public sf::Drawable
{
private:
int renderId;
public:
RenderObject(RenderMachine* rm){ (*rm).add(*this); }
int getRenderId() const { return renderId; }
#include "RenderObject.h"
class RenderMachine
{
std::vector< std::vector<sf::Drawable*> > renderVector;
public:
void add(RenderObject* renderObject);
和RenderMachine.cpp
#include "RenderMachine.h"
void RenderMachine::add(RenderObject* renderObject)
{
renderVector[(*renderObject).getRenderId()].push_back(renderObject);
}
最佳答案
在 RenderObject
的构造函数中对 add
的调用应该在 RenderMachine
已知时(当它是完整类型时)完成。这适用于对头文件中现在拥有的其他类型的对象的所有调用。像这样:
// RenderObject.h
class RenderMachine;
class RenderObject {
public:
RenderObject(RenderMachine* rm);
};
// RenderMachine.h
class RenderObject;
class RenderMachine {
public:
void add(RenderObject* renderObject);
};
// RenderObject.cpp
RenderObject::RenderObject(RenderMachine* rm) {
rm->add(this);
}
// RenderMachine.cpp
void RenderMachine::add(RenderObject* ro) {
}
关于c++ - 错误: expected ‘)’ before ‘*’ token despite not include-loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57981155/