c++ return 从函数指向结构的指针

c++ return a pointer to a struct from a function

我试图在我的 class 中声明一个 struct 然后 return 一个指针 struct 在 class 中使用成员函数,但它不起作用。

这是我的代码:

someClass.h:

class someClass
{
public:        
    someClass();
    sword* returnSword();        

    struct sword
    {
        int str;
        char name;
    };

    sword* m_sword;
};

someClass.cpp:

#include "someClass.h"

someClass::someClass()
{
    m_sword = new sword;

    m_sword->name='s';
    m_sword->str=5;
}


someClass::sword* someClass::returnSword()
{    
    return m_sword;    
}

如果我的代码完全是胡说八道,请解释我如何在我的 class 中有一个结构,对其进行初始化,然后 return 从那个 class 指向的指针那个结构。

谢谢。

总是post 你得到的编译错误。在这种情况下:

error: 'sword' does not name a type
  sword* returnSword();
  ^

好的。为什么 sword 不命名类型?因为还没有公布。在对其进行任何引用之前,您必须声明 sword

class someClass
{
public:        
    struct sword   // <== must be declared
    {
        int str;
        char name;
    };

    someClass();
    sword* returnSword();   // <== before you use it
    // ...
};

虽然你真的需要m_sword做指针吗?可以将其设为一个值并具有 returnSword() return 参考。这样你就不会忘记在你没有写的析构函数中 delete 它...

sword* returnSword();

是个问题。 sword 在该行未知。将 sword 的定义移到该行之前或提供前向声明。

class someClass
{
public:        
    someClass();

    struct sword
    {
        int str;
        char name;
    };

    sword* returnSword();        


    sword* m_sword;
};

class someClass
{
public:        
    someClass();

    struct sword;

    sword* returnSword();        

    struct sword
    {
        int str;
        char name;
    };

    sword* m_sword;
};

使用剑的前向声明是另一种解决问题的方法。

class someClass
{
public:        
    someClass();
    struct sword; // FORWARD declaration for sword
    sword* returnSword();        

    struct sword
    {
        int str;
        char name;
    };

    sword* m_sword;
};