Class 在类内返回结构

Class 在类内返回结构,class,structure,Class,Structure,我正在将我的应用程序转换为OOP类型,但我在助手函数方面遇到了问题。我所做的是将helper函数作为private放在类中。如何声明函数“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; }

我正在将我的应用程序转换为OOP类型,但我在助手函数方面遇到了问题。我所做的是将helper函数作为private放在类中。如何声明函数“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 *);
};

有很多错误,但我想首先从第一个错误开始,这是
错误:“section\t”没有命名类型

您的结构section\t和其他结构需要在使用它们的函数上面声明,如add\u section。C++类型声明是向前可见的,这意味着它们的可见性从它们首次声明的点开始,而不是在后面。顺序很重要,它是C语言的一种继承特性,基于对包含文件的“文本”处理,而不是真正的模块或多文件类型元数据,编译器传统上在语法声明时记录每个类型,并将其存储在符号表中,在符号表中可以立即使用

这与Java或C#编译器不同,后者先解析整个源文件,然后解析类型和符号,从等式中删除顺序

另一个错误,您的*位于错误的位置,请将其直接移动到第\u t节之后:

section_t XIniFile::*addSection(ini_file_t *n, char *d)
改为:

XIniFile::section_t* XIniFile::addSection(ini_file_t *n, char *d)

也可以,在C++中,不必像C一样使用结构体的Type,可以简单地说:

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++中隐含地“类型化”,虽然有一点不同,但并不相关。

< P>将AddiS切片转换为:

XIniFile::section_t * XIniFile::add_section(ini_file_t *n, char *d)

由于section\u t是XIniFile的成员

感谢codenheim的及时回复,我已经尝试过了,但没有解决问题,我不确定你指的是哪个问题。在声明类型之前,不能使用该类型。我假设错误消息是不同的。add_section返回一个section结构,这就是为什么我应该用
section\t XIniFile::*addSection(ini_file\u t*n,char*d)
查看我的编辑。你的*放错地方了。它需要在类型旁边。T*表示指向T的指针。您需要将*保留在T旁边。据我所知,没有合法的语法Foo::*条。您在我回答后编辑了问题,根据我的第一个建议进行了修改,但没有在问题中注明。这将使未来的读者感到困惑。编辑时最好注意,因为这可能会使答案无效。谢谢!你救了我:)@Gibs-我高估了发球的答案。这是习惯上的堆栈溢出投票的答案,你觉得有帮助。是的,我其实想投票,但不幸的是,我只有12次重复笑