c++从函数返回一个指向结构体的指针

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

本文关键字:一个 结构体 指针 函数 返回 c++      更新时间:2023-10-16

我试图在我的类中声明一个struct,然后返回一个指针使用该类中的成员函数对该struct进行操作,但它不起作用。

下面是我的代码:

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;    
}

如果我的代码是完全无意义的,请解释我如何在我的类中有一个结构体,初始化它,然后从该类返回指向该结构体的指针。

谢谢。

总是张贴你得到的编译错误。在本例中:

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

OK。为什么sword不命名一个类型?因为还没有宣布。您必须在引用sword之前声明它:

class someClass
{
public:        
    struct sword   // <== must be declared
    {
        int str;
        char name;
    };
    someClass();
    sword* returnSword();   // <== before you use it
    // ...
};

虽然你真的需要m_sword是一个指针吗?可以让它成为一个值,并让returnSword()返回一个引用。这样你就不会忘记在你没有写的析构函数中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;
};