我正在将我的应用程序转换为OOP类型,但是我遇到了辅助函数的问题。我所做的是将类中的辅助函数作为私有函数。我该如何声明一个函数" addSection"返回结构
这是我的.cpp文件
section_t XIniFile::*addSection(ini_file_t *n, char *d)
{
section_t *s = (section_t *)malloc(sizeof(section_t *);
//add sections
return s;
}
这是我的.h文件
class XIniFile
{
public:
int open(const char *);
int readString(const char *, const char *, char *);
int readInt(const char *, const char *, int *);
int writeString(const char *, const char *, char *);
int writeInt(const char *, const char *, int *);
int close();
private:
typedef struct key_tag {
char *name;
char *value;
key_tag *next;
} key_tag_t;
typedef struct sections_tag {
char *name;
sections_tag *next;
key_tag_t *keys;
} section_t;
typedef struct {
char *name;
section_t *sections;
int modified;
} ini_file_t;
section_t *add_section(ini_file_t *, char *);
key_tag_t *add_key(section_t *, char *, char *);
};
有很多错误,但我想首先从第一个错误开始error: ‘section_t’ does not name a type
答案 0 :(得分:3)
将add_section转为:
XIniFile::section_t * XIniFile::add_section(ini_file_t *n, char *d)
因为section_t是XIniFile的成员
答案 1 :(得分:0)
你的struct section_t和其他结构需要在使用它们的函数之上声明,比如add_section。 C ++类型声明是向前可见的,这意味着它们的可见性从它们首次声明的那一点开始延伸,但不会落后。顺序很重要,它是C语言的继承特性,基于包含文件的“文本”处理而不是真正的模块或多文件类型元数据,其中编译器传统上记录每个类型,因为它在语法上被声明,存储在一个符号表,可立即使用。
这与Java或C#编译器不同,Java编译器首先解析整个源文件,然后解析类型和符号,从等式中删除顺序。
另一个错误,你的*在错误的地方,在section_t之后直接移到
section_t XIniFile::*addSection(ini_file_t *n, char *d)
更改为:
XIniFile::section_t* XIniFile::addSection(ini_file_t *n, char *d)
此外,在C ++中,您不必像C中那样对结构使用typedef。您可以简单地说:
struct key_tag_t {
char *name;
char *value;
key_tag_t *next;
};
struct section_t {
char *name;
sections_tag *next;
key_tag_t *keys;
};
section_t *add_section(ini_file_t *, char *);
key_tag_t *add_key(section_t *, char *, char *);
结构和类在C ++中隐式“typedefed”,虽然存在细微的差别,但它并不相关。