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;
};
我试图在我的 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;
};