返回类中的结构

时间:2014-07-25 06:02:09

标签: class structure

我正在将我的应用程序转换为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

2 个答案:

答案 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”,虽然存在细微的差别,但它并不相关。