我在全局范围内定义了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
我做错了什么,或者结构不能在全球范围内使用?
答案 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;
和其余部分只能出现在函数内部。