错误C2039:'get_quest_dynstr':不是'`global namespace'的成员

时间:2015-06-04 11:37:08

标签: c++ oop

我收到此错误

  

错误2错误C2039:'get_quest_dynstr':不是'`global的成员   namespace''e:\ phase3a \ tdisk \ workspace \ cbs \ source \ cbs \ schedapp \ source \ treesearchbox.cpp 17 1 SchedApp

     

错误3错误C2039:'CheckCommand':不是'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;
}

我很长时间都在努力纠正这个错误。请帮我。我做错了什么?

1 个答案:

答案 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
};

我想我今天学到了一些东西:)