Функция не найдена в области действия основного - PullRequest
0 голосов
/ 18 ноября 2010

У меня проблема, обычно я понимаю, почему это происходит, я не объявлял функцию в основном методе. Но сам класс включает в себя файл .h, в котором есть прототип этого метода, поэтому я немного растерялся, почему он не входит в область действия основной функции.

  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 ]

4 голосов
/ 19 ноября 2010

Solar является классом, а initializeGL и paintGL являются функциями-членами. Если вы хотите использовать их, вам придется создать экземпляр Solar.

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

Читайте о функциях-членах: http://msdn.microsoft.com/en-us/library/fk812w4w.aspx

3 голосов
/ 19 ноября 2010

Функция paintGL() является функцией-членом класса Solar. Вы можете вызвать его только для объекта типа Solar:

Solar s;
s.paintGL();

Если вы хотите иметь возможность вызывать его без объекта, вы должны либо сделать его свободной, либо статической функцией-членом:

// free
void paintGL();

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

Это, конечно, работает, только если paintGL не использует данные члена Solar ...

2 голосов
/ 19 ноября 2010

Обе функции являются функциями экземпляра; вам нужно создать экземпляр нового объекта Solar и вызывать из него функции, а не вне его, как вы это сделали

1 голос
/ 19 ноября 2010

initializeGL и paintGL являются функциями-членами класса 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:
  .....
};

... или (худший вариант на сегодняшний день), сделайте их глобальными функциями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...