user2531665
user2531665

Reputation: 13

can't use structure in global scope

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?

Upvotes: 1

Views: 1429

Answers (2)

Lightness Races in Orbit
Lightness Races in Orbit

Reputation: 385395

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

Upvotes: 4

Balog Pal
Balog Pal

Reputation: 17243

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.

Upvotes: 1

Related Questions