一切正常,直到我将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
我不知道为什么!
答案 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
}