类型 'Mesh *' 的参数与类型 'Mesh *' 的参数不兼容

argument of type 'Mesh *' is incompatible with parameter of type 'Mesh *'

本文关键字:参数 Mesh 类型 不兼容      更新时间:2023-10-16

这个错误让我感到困惑,因为我知道我已经设法将一个对象的指针传递给另一个类的函数,但现在它只是不想工作。

//source.cpp
#include <iostream>
#include <iomanip>
#include <vector>
// OPENGL Dependencies
#include <GLglew.h>
#include <GLfreeglut.h>
#include <glmglm.hpp>
#include <glmgtcmatrix_transform.hpp>
// VBO Indexer
#include "vboindexer.hpp"
// My classes
#include "controls.h"
#include "MyMeshClass.h"
const int WIDTH = 800;
const int HEIGHT = 600;
int width = WIDTH;
int height = HEIGHT;

controls* Controls; // pointer to controls object
Mesh* MyMesh;
void Display() {
    GLuint pickingProgramID, gvertexbuffer;
    if (true) { 
        Controls->myPicking( MyMesh, pickingProgramID, 
                             gvertexbuffer);
    }
}
void InitMesh() {
    //loads object
    MyMesh = new Mesh();
}
void InitializeResources() {
    InitMesh();
}
int main(int argc, char **argv) {
    // GLUT initialization.
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB );
    glDisable(GL_MULTISAMPLE);
    glutInitWindowSize(width, height);
    glutCreateWindow("Codebase 1, 3.3+ Edition");
    glewInit();
    Controls = new controls(height, width);
    glutDisplayFunc(Display);
    InitializeResources();
    // Enter GLUT loop.
    glutMainLoop();
    return 0;
}

//controls.h
#pragma once
#ifndef CONTROLS_H
#define CONTROLS_H
#include <GLglew.h>
#include <GLfreeglut.h>
#include "MyMeshClass.h"
class controls {
private:
protected:
    static controls *instance;
public:
    controls();
    controls( int nheight, int nwidth );

    void myPicking( Mesh* MyMesh,
                          GLuint pickingProgramID,  
                          GLuint gvertexbuffer );
};
#endif

//Controls.cpp
#include "controls.h"
controls *controls::instance = NULL;
controls::controls() {
}
controls::controls( int nheight, int nwidth ) {
}

void controls::myPicking( Mesh* MyMesh,
                            GLuint pickingProgramID,    
                          GLuint gvertexbuffer ) 
{

}

// MyMeshClass.h
#pragma once
class Mesh { 
private:
public:
};

正如你所看到的,我定义了我的指针,它在另一个函数中被'new'证实,该函数在它到达Display()之前执行,并且我将它作为myppickk函数的参数传递给Controls类,但我得到了上面的错误,这让我感到困惑。

编辑:

好了,所以也澄清,这是一个语法/智能感知错误,它不是形式编译,但出现在编辑器在函数所有我试图传递它到myppickk(…)函数

好的,我已经找到了问题,这是一个隐形循环依赖问题,部分原因是信任智能感知错误也是编译错误。

一旦我把我的网格类在#ifndef -> #endif和编译错误消失了。

当我首先调用Controls.h时,它调用我的网格类,然后再次调用它,导致重新定义错误,但我只能在编译时看到这个。

问题似乎解决了。