不能在全球范围内使用结构

时间:2013-06-28 11:28:11

标签: c++ struct

我在全局范围内定义了struct,但是当我尝试使用它时,我得到错误:'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

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

2 个答案:

答案 0 :(得分:3)

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

您根本无法编写程序代码,例如函数体外的赋值。 任何对象就是这种情况:

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 :(得分:1)

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