c++ - 错误: expected ‘)’ before ‘*’ token despite not include-loop

标签 c++ compiler-errors

我有一个类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/

相关文章:

swift - "Use of Unresolved Identifier"函数返回错误

c++ - 错误: no matching function for call to 'function namel'

c - 中缀到后缀函数错误 : control may reach end of non-void function

c++ - 如何使用客户端套接字绑定(bind)

C++ 异常处理器 : terminate ist always called

c++ - 字符串格式化 (c++)

Java导入包不存在

c++ - 使用 "for"打破 "break"循环被认为是有害的?

c++ - 2 Icosaedres 上的 OPENGL 动画速度较慢

c++ - c/c++程序中的print(而不是printf())是由编译器的哪一部分检测的