外部未命名结构对象定义
Extern unnamed struct object definition
我得到了一个类型为"unnamed-struct"的全局对象,我正在尝试定义它。我不想用这种无用的类型污染我的全局命名空间(它只会使用一次)。
全球.h
extern struct {
int x;
} A;
有没有正确的方法来定义这样的对象?
我正在尝试这个:
全球.cpp
struct {
int x;
} A = { 0 };
但是VS2012抛出"错误C2371:'A':重新定义;不同的基本类型"。谢谢。
一种可能的解决方案:创建另一个不包含 Global.h 的文件Global_A.cpp,并在那里定义A
。 根据等效定义规则,只要匿名结构定义是等效的,这将有效。
这仍然是一个坏主意,大多数编译器会警告它,例如(gcc):警告:非局部变量"<匿名结构>A"使用匿名类型匿名结构>。
没有办法仅仅因为它容易出错:将来的某个时候,有人(甚至可能是你)可能想要修改这个结构的定义,他可能会忘记在头文件和源文件中相应地这样做。因此,您必须为此结构发明一个名称,并将其名称用于源文件,并将其定义留给标头。
这是否对您有帮助,这是我的第一篇文章...所以放轻松。
我刚刚遇到了这个问题,我所做的是我添加了一个函数,该函数将操作结构添加到包含匿名结构的文件中。 这样,我就可以从项目中的任何文件调用该函数,它为作结构中的值。
下面是一个示例:
header.c 有这个匿名结构:
struct
{
char line1[80];
char line2[80];
char line3[80];
} header;
我想在"interface.c"中操作这些值,因为我正在另一个文件中制作命令行界面。 我的第一直觉是使用 extern,但似乎在 header.c 中添加以下函数同样好或更好(有些人在可以避免的情况下不鼓励使用 extern)。
void changeHeaders(char *one, char *two, char *three);
void changeHeaders(char *one, char *two, char *three)
{
strcpy(header.line1, one);
printf("nHeader 1: %s", header.line1);
strcpy(header.line2, two);
printf("nHeader 2: %s", header.line2);
strcpy(header.line3, three);
printf("nHeader 3: %s", header.line3);
}
现在,只要我包含该函数的原型,我就可以使用该函数从任何文件中操作这些结构变量。 希望对某人有所帮助。
- 自定义对象的dlib序列化在gcc中失败
- 如何将带有自定义对象的容器从C++传递到QML
- 直接在 unordered_map 的方法中使用哈希,而不是生成哈希的用户定义对象
- 如何使用Q_PROPERTY公开自定义对象列表
- 如何在自定义对象的<<运算符中添加自定义前缀
- 将自定义对象作为参数从目标 C 传递到 C++
- 如何使用构造函数声明指向用户定义对象的指针?
- 使用自定义对象声明shared_ptr数组时出现错误 C2664
- 在具有自定义对象的集合中查找值
- std::set 不会检测到重复的自定义对象
- 如何使用自定义对象的序列化在 c++ 中编写自定义二进制文件处理程序
- std::排序为排序自定义对象时出现的向量引发错误
- 如何通过引用对用户定义对象的类型集 (STL) 的数组元素进行增强迭代?
- 具有自定义对象的C 优先级队列
- 自定义对象构造函数在循环外部循环
- 带有自定义对象的C 范围循环
- 为什么不允许通过 decltype(lamda) 定义对象,我该如何改进它?
- 如何正确地将规则 5(或零?)应用于包含带有字符串的自定义对象向量的类
- 编写安全包装类以管理用户定义对象的指针
- 如何在包含自定义对象的容器中使用分区函数C++