在与标头分开的 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 中定义私有类函数时出错的主要内容,如果未能解决你的问题,请参考以下文章