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

Posted

技术标签:

【中文标题】在与标头分开的 cpp 中定义私有类函数时出错【英文标题】:error defining a private class function in a cpp separate from header 【发布时间】:2018-10-27 10:31:33 【问题描述】:

我真的不知道如何恢复清楚我想知道的,所以标题可能有点混乱。 我在标题中定义了一个类,例如“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;

【问题讨论】:

因为类型是CProgram::var 该类型嵌套在 CProgram 中,因此您应该完全限定地引用它:CProgram::var 【参考方案1】:

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 上的参考资料。

【讨论】:

以上是关于在与标头分开的 cpp 中定义私有类函数时出错的主要内容,如果未能解决你的问题,请参考以下文章

使用类标头对函数的未定义引用[重复]

在动态链接库的 .cpp 中定义类的函数

尝试在类定义中声明数组时出错

将类的定义放在头文件中,把成员函数的实现代码放在一个cpp文件中

作为类成员的函数的定义

编译具有相同标头的 C 和 C++ 文件时未定义的引用