1

我在全局范围内定义了 struct ,但是当我尝试使用它时,出现错误:'co' does not name a type,但是当我在函数中执行相同操作时,一切正常

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

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

4

2 回答 2

4

并不是说您“不能在全局范围内使用结构”。这里的结构没有什么特别之处。

您根本无法在函数体之外编写诸如赋值之类的过程代码。任何对象都是这种情况:

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;
}
于 2013-06-28T11:33:15.457 回答
1

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

于 2013-06-28T11:30:32.447 回答