在与标头分开的cpp中定义私有类函数时出错

时间:2018-10-27 10:31:34

标签: c++ class

我真的不知道如何继续清除我想知道的内容,因此标题可能会有些混乱。 我在标题中定义了一个类,例如“ CClass”。 在此类内部,例如:myStruct。 在私有区域中,我具有一个函数的签名,该函数返回myStruct类型的指针,例如:myStruct *(int a){}; 我有一个CPP文件,在其中编写了函数定义。 我在CPP的开头包含了该类,但是在编写函数定义时出现错误:找不到标识符“ myStruct”。 我将插入确切的代码段。

class CProgram{

struct var {
    int asc;
    int val;
    var*next;
};

  var *tr;

public:

  void init(std::string in);
  CProgram(std::string in);
  CProgram();
  ~CProgram();

private:
  void sub();
  var* search(var*h, int u);
};

接下来,我从cpp中插入一段代码:

#include "CProgram.h"
using namespace std;

var* CProgram::search(var*h, int u) {//here I have the error:identifier "var" is undefined 
while ((h->next != NULL) && (h->asc != u)) 
    h = h->next;

if (h->asc == u) return h;
else return NULL;
}

1 个答案:

答案 0 :(得分:0)

var结构嵌套在CProgram类中,因此在源文件中不可见,您必须将其完全限定为CProgram::var。 然后您的函数将变为:

CProgram::var* CProgram::search(var*h, int u) 
{
    while ((h->next != NULL) && (h->asc != u)) 
    h = h->next;

    if (h->asc == u) return h;
        else return NULL;
}
  

嵌套类的名称存在于封闭类的范围内。

有关更多详细信息,请参见nested class上的参考。