为什么会出现此错误:C2143语法错误:在'&'之前缺少','?

时间:2019-06-12 22:47:19

标签: c++

一切正常,直到我将drow函数添加到Renderer.h文件中

void Drow(const VertexArray& va, const IndexBuffer& ib, const Shader& shader)const;

Renderer.h:

#include <GL\glew.h>
#include"Shader.h"
#include"VertexArray.h"
#include"IndexBuffer.h"


#define ASSERT(x) if(!(x))__debugbreak();
#define GLCall(x) GLClearError();\
    x;\
    ASSERT(GLlogCall(#x, __FILE__, __LINE__))

/*function to clear all last errors in opengl*/
void GLClearError();

/*function to print all errors */
bool GLlogCall(const char* function, const char* file, int line);

class Renderer {
public:
    void clear()const;
    void Drow(const VertexArray& va, const IndexBuffer& ib, const Shader& shader)const;

};

当我尝试构建它时,在Visual Studio 2015中出现此错误:

Error   C2143   syntax error: missing ',' before '&'    

和这个

Error   C4430   missing type specifier - int assumed. Note: C++ does not support default-int        

我不知道为什么!

1 个答案:

答案 0 :(得分:1)

问题是VertexArray,IndexBuffer或Shader头文件包含Rendered.h文件,因此我具有如下循环依赖:

Renderer.h

#include"Shader.h"
#include"VertexBuffer.h"
#include"IndexBuffer.h"

class Renderer{
public:
// some code
    void Drow(const VertexArray& va, const IndexBuffer& ib, const Shader& shader)const;
}

和Shader.h,VertexBuffer.h,IndexBuffer.h文件具有以下代码:

#include"Renderer.h"
class className{
//  code
}

所以我使用了前向声明并将头文件包含到cpp文件中,并且文件已经变成这种方式 Renderer.h


#include <GL\glew.h>

class Shader.h;
class VertexBuffer.h;
class IndexBuffer.h;

class Renderer{

public:

//  code
    void Drow(const VertexArray& va, const IndexBuffer& ib, const Shader& shader)const;
}

Renderer.cpp

#include "Renderer.h"
#include<iostream>

#include"Shader.h"
#include"VertexArray.h"
#include"IndexBuffer.h"

// the rest of code

和Shader.h,VertexBuffer.h,IndexBuffer.h文件具有以下代码:

//still have
#include "Renderer.h"
class className{
//  code
}