可能的前向声明错误

时间:2013-09-10 20:19:35

标签: c++

我有两个文件。一个是main.cpp,#include“MouseController.h”,它有一个Mouse对象的classdef。如果MouseController.h根本没有导入或包含,为什么main在查找我的Mouse类时遇到问题?

如果有任何用途,可以通过CMD-Click of Xcode查找返回其声明的内容,发现Mouse类正常。

Main.cpp的

#include <GLUT/GLUT.h>
#include <OpenGL/OpenGL.h>
#include <iostream>

#import "MouseController.h"

Mouse mouse;

float angle = 0.0f;

void selfInit();
void glInit();
void DisplayCallback();
void ReshapeCallback(int w, int h);
void UpdateAll(int value);


int main(int argc, char** argv)
{
    selfInit();
    glutInit(&argc, argv);
    glInit();

    return 0;
}

此后不再有对鼠标对象的引用。

MouseController.h

#ifndef __FinalPiece__MouseController__
#define __FinalPiece__MouseController__

class Mouse {
    public:
    static int CurrentX;
    static int CurrentY;
    static int LastX;
    static int LastY;
    static int DeltaX;
    static int DeltaY;

    static void move(int x, int y);
    static void update();
    static void clicked(int button, int state, int x, int y);
};
#endif

1 个答案:

答案 0 :(得分:2)

在没有看到你的代码的情况下,这是一个黑暗的镜头,但听起来你得到了一个链接器错误。

// main.cpp
#include "MouseController.h"

int main()
{
    // do stuff
    return 0;
}

// MouseController.cpp
#include "MouseController.h"

// implement MouseController here

// MouseController.h
// define MouseController here

如果MouseController.cpp不存在,没有被编译(即不是你的项目或Makefile的一部分),或者MouseController.h没有实现类内联,编译器知道MouseController应该是什么样子,但链接器找不到它。