2013-06-28 26 views
0

我在全局范围内定义了结构,但是当我尝试使用它时,我得到错误:'co'没有命名为类型,但是当我在功能,一切工作正常不能在全局范围使用结构

typedef struct { 
    int x; 
    int y; 
    char t; 
} MyStruct; 

    MyStruct co; 
    co.x = 1; 
    co.y = 2; 
    co.t = 'a'; //compile error 

void f() { 
    MyStruct co; 
    co.x = 1; 
    co.y = 2; 
    co.t = 'a'; 
    cout << co.x << '\t' << co.y << '\t' << co.t << endl; 
} //everything appears to work fine, no compile errors 

我做错了什么,或结构只是不能在全球范围内使用?

+1

外'main',你可以拥有的唯一的事情就是声明和函数定义。像'co.x = 1;'这样的分配必须进入'main'(或另一个函数)。 – jogojapan

+0

['cout'可能重复不会命名一个类型](http://stackoverflow.com/questions/9935027/cout-does-not-name-a-type) – jogojapan

回答

2

这不是说你“不能在全球范围内使用结构”。这里没有什么特别的结构。

您根本无法编写程序代码,例如函数体外的赋值。这与任何物体的情况下:

int x = 0; 
x = 5; // ERROR! 

int main() {} 

同样,向后typedef无义是如此上世纪(和用C不需要++)。

如果你想你的初始化对象,这样做:

#include <iostream> 

struct MyStruct 
{ 
    int x; 
    int y; 
    char t; 
}; 

MyStruct co = { 1, 2, 'a' }; 

int main() 
{ 
    std::cout << co.x << '\t' << co.y << '\t' << co.t << std::endl; 
} 
1

结构可以像“你可以创建它的全局变量”那样被“使用”。 剩余的代码co.x = 1;和其余的只能在函数内出现。