c++从函数返回一个指向结构体的指针
c++ return a pointer to a struct from a function
我试图在我的类中声明一个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;
};
相关文章:
- C++ push_back() 一个结构体到一个向量中
- QUdpSocket : 我收到一个结构体,我该如何使用它?
- 使用std::copy将一个结构体的数组转换为另一个结构的Vector
- 如何调用一个函数,它在一个单独的类中打印出一个结构体数组
- 如何创建一个结构体数组
- 从std::vector存储到std::set,其中vector包含一个结构体,而std::set只包含该结构体中的一个
- 有条件地初始化一个结构体字段——仅当它存在于该结构体中时
- 如何释放一个结构体的内存,每次循环迭代的指针
- 静态类成员,它是一个结构体
- 定义操作符<为另一个结构体的两个对象在结构体中
- 如何在c++中写一个结构体到文件并读取文件
- 如何从另一个c++类访问一个结构体
- 如何在动态二维数组中存储数据,在结构体中声明,该结构体也被c++中的另一个结构体使用
- 添加并列出一个结构体数组
- 如果我使用一个结构体来携带argc和argv,我如何将地址argv赋值给结构体中的变量?
- 封送一个结构体以获得一个固定指针
- 如何从类库返回一个结构体数组到控制台应用程序
- 一个结构体的深度拷贝,它嵌入了许多简单的变量和一个嵌套结构体
- 如何在一个结构体中为多个函数全局存储数据
- 创建一个结构体数组,但稍后定义其大小