我正在尝试在我的班级中声明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;
}
如果我的代码完全是废话,请解释我如何在我的类中有一个结构,初始化它然后从指向该结构的类返回一个指针。
谢谢。
答案 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;
};