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

时间:2015-05-17 03:32:04

标签: c++ pointers struct

我正在尝试在我的班级中声明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;    
}

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

谢谢。

3 个答案:

答案 0 :(得分:4)

始终发布您获得的编译错误。在这种情况下:

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()返回引用。这样你就不会忘记在你没有写的析构函数中delete ...

答案 1 :(得分:1)

该行

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

答案 2 :(得分:0)

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

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

    struct sword
    {
        int str;
        char name;
    };

    sword* m_sword;
};