[技术| 编程·课件·Linux] 代人求教C++问题

fghhslk · 发布于 2012-06-09 10:38 · 1590 次阅读
38
为什么结构体要定义在main外面,才能让vector之类的STL容器与结构体混用?例如vector<struct_name> s;刚刚试了一下,如果把结构体定义在main里面,就通不过编译。
共收到 8 条回复
sky · #2 · 2012-6-9 11:19:35  回复 支持 反对
定义在主函数之外的内置类型变量或者自定义类型变量是全局性质的,它们会在编译的时候在堆上分配内存空间,这样,在整个函数运行期间,它们都可以被访问。在主函数中定义的属于局部变量,局部变量的内存是在栈上分配的,它是在程序运行时才会被分配存储空间,所以在程序编译的时候,你是找不到栈空间上的这个自定义类型变量的,所以编译无法通过了。

点评

多谢解答  详情 回复 发表于 2012-6-9 17:06
czc30114 · #3 · 2012-6-9 11:26:42  回复 支持 反对
想了一下,函数里面定义的变量不能拿到函数外部用吧,是这个意思么,求楼下高手
Castelo · #4 · 2012-6-9 13:24:40  回复 支持 反对
sky正解吧。

不同的编译器表达出来的动作甚至有时也有天壤之别。

别太在乎这些了。幸福的家庭都相似,不幸的家庭各有各的不幸。开局好就好。拙见。
fghhslk · #5 · 2012-6-9 17:06:43  回复 支持 反对
sky 发表于 2012-6-9 11:19
定义在主函数之外的内置类型变量或者自定义类型变量是全局性质的,它们会在编译的时候在堆上分配内存空间, ...

多谢解答
wljyy521 · #6 · 2012-6-9 23:07:16  回复 支持 反对
shy  说的是变量在内存中的存储方式:lol正解
poiu9080 · #7 · 2012-6-10 15:30:14  回复 支持 反对
其实是在讲变量的作用域
wjl · #8 · 2012-6-14 13:10:25  回复 支持 反对
编译的时候在堆上分配内存空间?  堆上? really?
ES_soso · #9 · 2012-6-19 16:03:07  回复 支持 反对
受教
回帖
B Color Image Link Quote Code Smilies
Command + Enter
快速回复 返回顶部 返回列表