2017-04-04 82 views
0

是否可以指向在类中另一个文件中定义的结构?指向另一个文件中定义的结构的指针

我试图像下面的代码,但得到这个错误:

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',所以没有工作。

+2

首先关于您的术语的小记录:*原型*是函数的前向声明。你在'entry'类中做什么只是向前声明'entry :: list'类。然后讲述你的问题:不,你不能访问另一个范围的函数中声明或定义的符号。 –

+1

顺便说一句,有项目互相链接是有点不寻常的。如果每个'entry'属于'list',为什么它必须跟踪它属于哪个列表?添加和删​​除条目将会非常复杂。 –

+0

它用于设置菜单。这些条目在运行时不会改变。 我需要ptrToStruct指向该菜单项的子菜单。 所以我的结构是我的列表,其中包含条目的向量。其中一些条目有一个子列表。这就是为什么我需要指针。该结构还包含一个保存所选条目的int值。 我有一种感觉,这不是最好的办法。我打开提示! –

回答

2

这是关于范围。当您在entry内宣告list这是一个新类型entry::list

如果你想要一个全局类型list你应该将struct list;移动到全局范围之外。

您可能想要对main中的声明做同样的事情。

+0

谢谢。有全局变量是不好的风格,对吧? –

+0

是的,全局变量比全局类型导致更多的复杂性。 –

+0

对不起,全球型是指什么? 如果我将结构的定义放入一个单独的.h文件并将其包含在我的main.cpp和entry.h中,该怎么办?这会更好吗? –

相关问题