C++ -- 候选人期望 1 个参数,0 个关于类定义的参数



我使用c ++和opengl已经有一段时间了,但从未真正沉浸在类中。我正在尝试为我的体素游戏创建一个 Block 类,但编译器给了我错误

block.h:13:7: note: candidate expects 1 argument, 0 provided

第 13 行是创建类的行。这是块头文件:

#ifndef BLOCK_H
#define BLOCK_H
#include <GL/glew.h>
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/type_ptr.hpp>
#include "Shader.h"
#include "Camera.h"
using namespace glm;
class Block{
public:
    void render(Camera cam);
    glm::vec3 position;
    Block(glm::vec3 position);  
private:
    void createMesh();
    GLuint VAO, VBO;
    Shader shader;
};
#endif

完整的错误:

world.cpp: In constructor ‘World::World(GLFWwindow*)’:
world.cpp:3:32: error: no matching function for call to ‘Block::Block()’
 World::World(GLFWwindow* window)
                                ^
world.cpp:3:32: note: candidates are:
In file included from world.h:9:0,
                 from world.cpp:1:
block.h:17:2: note: Block::Block(glm::vec3)
  Block(glm::vec3 position); 
  ^
block.h:17:2: note:   candidate expects 1 argument, 0 provided
block.h:13:7: note: Block::Block(const Block&)
 class Block{
       ^
block.h:13:7: note:   candidate expects 1 argument, 0 provided

我还收到许多其他类似的编译器错误,这是输出:
http://pastie.org/10691691

---编辑---好的,我缩短了错误。以下是更新的错误日志:http://pastie.org/10691707

我看到一个错误,说Shader没有默认的构造函数,即Shader::Shader()。对于该错误,Block 类的构造函数将需要在成员初始值设定项列表中构造它。

例如

Block::Block(glm::vec3 position)
:  m_Shader( "needed shader args" )
{
}

看起来你正试图在某个地方建造一个世界级的方块?。它也在抱怨 Block 缺少默认构造函数。如果需要默认构造函数,则必须在块类定义中定义一个构造函数。或者,您需要在 World 类的成员初始值设定项列表中初始化块类,就像上面的着色器示例一样。

正如编译器所建议的那样,您也可以在类成员初始值设定项中使用,但您需要为此启用 C++11 支持。

您对Block的定义要求在构造过程中传递glm::vec3参数(或Block本身进行复制构造)。您的World构造函数似乎没有提供这样的参数。

事实证明,

我还必须在每个类中放置一个空的覆盖构造函数。问题是我在创建变量以及实例化对象时调用构造函数。下面是一个快速示例:

Shader::Shader(){
    //Do nothing here is it just a override so we declare the variable before creating it.
}
Shader::Shader(char* vpath, char* fpath){
    //Do proper shader stuff here
}

最新更新