功能未在主要范围内找到

时间:2010-11-18 20:58:01

标签: c++ scope

我有一个问题,通常我会理解为什么会发生这种情况,我没有在main方法中声明该函数。但是这个类本身包含.h文件,它有这个方法的原型,所以我有点迷失为什么它不在main函数的范围内。

  using namespace std;
  #include "Solar.h"


int main(){
  initializeGL();
  Stars *Alpha = new Stars(5.0);
  Planets *Awe = new Planets(.6,2,30,"Awe",0.0,0.0,0.0);
  paintGL();
  return 0;
}

void Solar::initializeGL(){

  glShadeModel(GL_SMOOTH);

  glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
  glClearDepth(1.0f);

  glEnable(GL_DEPTH_TEST);
  glDepthFunc(GL_LEQUAL);

  glHint(GL_PERSPECTIV
  ....
 }

稍后还有一个函数paintGL(),这里是头文件

 class Solar {
 public:
  void initializeGL();
  void resizeGL(int width, int height);
  void paintGL();
  .....
private:
  .....
};

我不是最好用c ++,所以任何帮助都会受到赞赏。

这里是错误

Solar.cpp:4: error: declaration of âvoid Solar::initializeGL()â outside of class is not definition
Solar.cpp:5: error: declaration of âvoid Solar::paintGL()â outside of class is not definition
Solar.cpp: In function âint main()â:
Solar.cpp:8: error: âinitializeGLâ was not declared in this scope
Solar.cpp:11: error: âpaintGLâ was not declared in this scope

4 个答案:

答案 0 :(得分:4)

Solar是一个类,initializeGLpaintGL是成员函数。如果您想使用它们,则必须创建Solar的实例。

Solar solar;
solar.initializeGL();
// ...more
solar.paintGL();

阅读成员函数:http://msdn.microsoft.com/en-us/library/fk812w4w.aspx

答案 1 :(得分:3)

paintGL()函数是类Solar的成员函数。您只能在Solar类型的对象上调用它:

Solar s;
s.paintGL();

如果你想能够在没有对象的情况下调用它,你应该使它成为自由函数或静态成员函数:

// free
void paintGL();

// static member
class Solar {
public: static void paintGL();
};

这当然仅在paintGL不使用Solar ...

的成员数据时才有效

答案 2 :(得分:2)

这两个函数都是实例函数;你需要实例化一个新的Solar对象并从中调用函数,而不是像你做的那样超出范围

答案 3 :(得分:1)

initializeGLpaintGL都是Solar类的成员函数,但您尝试将它们称为全局函数。那不行。

您需要Solar的实例:

int main(){
  Solar* solar = ... // magic

  solar->initializeGL();
  Stars *Alpha = new Stars(5.0);
  Planets *Awe = new Planets(.6,2,30,"Awe",0.0,0.0,0.0);
  solar->paintGL();

...或使函数成为静态成员函数:

class Solar {
 public:
  static void initializeGL();
  void resizeGL(int width, int height);
  static void paintGL();
  .....
private:
  .....
};

...或(迄今为止最差的选项),使它们成为全局函数。