2015-06-04 3 views
0

Я получаю эту ошибкуошибка C2039: «get_quest_dynstr»: не является членом «` глобального пространства имен»

Error 2 error C2039: 'get_quest_dynstr' : is not a member of '`global namespace'' e:\phase3a\tdisk\workspace\cbs\source\cbs\schedapp\source\treesearchbox.cpp 17 1 SchedApp

Error 3 error C2039: 'CheckCommand' : is not a member of '`global namespace'' e:\phase3a\tdisk\workspace\cbs\source\cbs\schedapp\source\treesearchbox.cpp 21 1 SchedApp

Когда я пытаюсь скомпилировать мое приложение C++.

TreeSearchBox.hpp

#if !defined(TREE_SEARCH_BOX) 
#define TREE_SEARCH_BOX 

#include "standaloneconn.hpp" 

class TREE_SEARCH_BOX : public STANDALONE_CONN 
{ 
public: 
    TREE_SEARCH_BOX(); 
    virtual int get_quest_dynstr(int idquest, LPTSTR opstr, PDYNOBJ dynpobj); 
    virtual int CheckCommand(PBASEWND pwnd, int idItem, HWND hwndCtl, int wNotifyCode, int indx); 
    virtual LPTSTR get_classname(){return _TEXT("TREE_SEARCH_BOX");} 
}; 

#endif 

TreeSearchBox.cpp

#include "cpptot.hpp" 
#include "apptot.hpp" 
#include "TreeSearchBox.hpp" 
#include "lov.hpp" 


//****************************************************************************** 
// Component: IFS/Scheduling 
// 
// File name: TreeSearchBox.cpp 
// 
// Purpose: Contains an object for connecting a standalone client directly to ORACLE 
//    
// Ver   Date  Sign History 
// ---   ----  ---- ------- 
//    150604  FARFLK Adding tree search functioanlity enhanced 
//******************************************************************************  
int TREE_SEARCH_BOX::get_quest_dynstr(int idquest, LPTSTR opstr, PDYNOBJ dynpobj){ 
    return 0;//get_quest_dynstr(idquest, opstr, dynpobj); 
} 

int TREE_SEARCH_BOX::CheckCommand(PBASEWND pwnd, int idItem, HWND hwndCtl, int wNotifyCode, int indx){ 
    return 0; 
} 

Я изо всех сил в течение длительного времени о том, как исправить эту ошибку. Пожалуйста, помогите мне. Что я делаю не так?

+0

Возможно, вам не хватает каких-либо необходимых включений. –

+0

Что в строке 17 и 22? Вы не показываете их. –

+0

Это простые комментарии. Я добавил их к вопросу. –

ответ

3

В начале у вас есть блок с сторожевой:

#if !defined(TREE_SEARCH_BOX) 
#define TREE_SEARCH_BOX 

, который хорошо. Но это означает, что вы звоните #define TREE_SEARCH_BOX, что означает, что TREE_SEARCH_BOX определяется как ничто. Поэтому при компиляции ваш препроцессор сканирует ваши файлы и заменяет TREE_SEARCH_BOX на . Это нарушение кода, потому что вы теперь пытаетесь скомпилировать это:

int ::get_quest_dynstr(int idquest, LPTSTR opstr, PDYNOBJ dynpobj){ ... 

Где :: означает global namespace.

Есть два способа исправить это:

  • изменить ваш охранник блок

    #if !defined(TREE_SEARCH_BOX_SOMETHING_ELSE) 
    #define TREE_SEARCH_BOX_SOMETHING_ELSE 
    
  • изменить свое имя класса.


Что я нахожу интересным является то, что вы не получаете сообщения о том, что вы пытаетесь скомпилировать:

class : public STANDALONE_CONN{ 

Но оказывается, что вы можете определить анонимный класс как это:

class : baseClass { 

    //bla 
}; 

я предполагаю, что я узнал что-то сегодня :)

+0

Отлично !!!! Большое спасибо .. вы спасли мой день :) –

+0

Ну, получается, что это происходит чаще. Просто [google] (https://www.google.nl/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=error%3A%20abstract%20declarator%20%E2%80%98%3Canonymous % 20class% 3E% E2% 80% 99% 20used% 20as% 20declaration) для 'error: abstract declarator '' используется как объявление', и вы найдете много подобных случаев;) Ваш компилятор, однако, t дать эту ошибку (это Visual C++?). –

+0

да это визуальный C++. есть ли какой-либо параметр, который мне нужно сделать, чтобы вывести скрытые сообщения об ошибках? –

Смежные вопросы