Question: I defined struct in the global scope, but when I try to use it, I get *error: ‘co’ does not name a type*, but when I do the same in a function, everything works fine

```
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

```

Am I doing something wrong, or structures just cannot be used in global scope?

Answer: 
It's not that you "can't use structures in global scope". There is nothing special here about structures.

You simply cannot write procedural code such as assignments outside of a function body. This is the case with *any* object:

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

int main() {}

```

Also, that backwards `typedef` nonsense is so last century (and not required in C++).

If you're trying to initialise your object, do this:

```
#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;
}

```
Structure can be "used" as in "you can create a global variable of it". 
The remainder of code, `co.x = 1;` and the rest can appear only inside functions.