指向另一个文件中定义的结构的指针
是否可以指向在类中另一个文件中定义的结构?指向另一个文件中定义的结构的指针
我试图像下面的代码,但得到这个错误:
cannot convert 'main()::list*' to 'entry::list*' in assignment
main.cpp中:
#include "entry.h"
#include <vector>
int main()
{
struct list
{
std::vector<entry*> entryVector;
int temp;
};
list A;
entry B;
B.ptrToStruct = &A;
return 0;
}
entry.h:
#ifndef ENTRY_H
#define ENTRY_H
#include <string>
class entry
{
public:
struct list; //prototype does not work
std::string text;
struct list* ptrToStruct;
};
#endif // ENTRY_H
我也试着写这样的原型:
struct main::list;
因为没有声明'main',所以没有工作。
这是关于范围。当您在entry
内宣告list
这是一个新类型entry::list
。
如果你想要一个全局类型list
你应该将struct list;
移动到全局范围之外。
您可能想要对main
中的声明做同样的事情。
谢谢。有全局变量是不好的风格,对吧? –
是的,全局变量比全局类型导致更多的复杂性。 –
对不起,全球型是指什么? 如果我将结构的定义放入一个单独的.h文件并将其包含在我的main.cpp和entry.h中,该怎么办?这会更好吗? –
首先关于您的术语的小记录:*原型*是函数的前向声明。你在'entry'类中做什么只是向前声明'entry :: list'类。然后讲述你的问题:不,你不能访问另一个范围的函数中声明或定义的符号。 –
顺便说一句,有项目互相链接是有点不寻常的。如果每个'entry'属于'list',为什么它必须跟踪它属于哪个列表?添加和删除条目将会非常复杂。 –
它用于设置菜单。这些条目在运行时不会改变。 我需要ptrToStruct指向该菜单项的子菜单。 所以我的结构是我的列表,其中包含条目的向量。其中一些条目有一个子列表。这就是为什么我需要指针。该结构还包含一个保存所选条目的int值。 我有一种感觉,这不是最好的办法。我打开提示! –