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

时间:2014-07-07 19:10:02

标签: c++ visual-studio-2010 class pointers mesh

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

//source.cpp
#include <iostream>
#include <iomanip>
#include <vector>

// OPENGL Dependencies
#include <GL\glew.h>
#include <GL\freeglut.h>
#include <glm\glm.hpp>
#include <glm\gtc\matrix_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 <GL\glew.h>
#include <GL\freeglut.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:

};

正如你所看到的,我定义了我的指针,它的基础是新的&#39;在另一个在它到达Display()之前执行的函数中,我将它作为myPicking函数中的参数传递给Controls类,但是我得到的上述错误让我感到困惑。

编辑:

好吧也是为了澄清,它是一个语法/智能感知错误,它不是形成编译,而是出现在我尝试将它传递给myPicking(...)函数的函数的编辑器中。< / p>

1 个答案:

答案 0 :(得分:0)

好的,我发现了这个问题,这是一个隐形的循环依赖问题,部分原因是信任intellisense错误也是编译错误。

一旦我将我的Mesh类放在#ifndef中 - &gt; #endif和编译错误消失了。

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

现在似乎已经解决了。