C 全局结构创造了名称冲突
C++ global structure creates name conflict
我编写了一个非常广泛的框架,可以在物理模拟中驱动字符。即使每个人都警告我不要这样做,但我还是使用了全球公共数据结构来存储信息并将其称为状态。它也不是在命名空间中。我可以通过宣布外部国家来使其在全球范围内访问;我之所以这样做的原因是因为应用程序中的任何地方都需要此结构,并且我发现只包括我的状态。该框架也正在迅速变化,我也发现不必关心传递数据,同步等的舒适感。当引入新组件时。
无论如何,现在S ***击中了风扇。我想使用QT的GUI类之一,并且已经具有自己的成员称为"类型状态状态"。他们的状态至少在命名空间中,但这似乎并不重要,因为在课堂内我已经在使用该名称空间。
我现在该怎么办?
您唯一的选择是撕开全局并用理智的东西替换它。这是非常痛苦的,但您确实没有其他选择。这就是为什么人们首先建议不要使用一种。
简而言之
我可能不了解问题,但是什么使您无法做
::state.var
?
普通::
表示全局名称空间,虽然使用全局符号具有众所周知的问题,并且全球变量也有自己的一系列问题(通常在C 代码中,使用单例),但使用全局没有任何神奇的邪恶全局名称空间中的变量。::errno
是这种变量实际上链接到UNIX式平台上的每个C和C 应用程序的示例。
好吧,有一个简单的选择:
extern State state;
State& mystate = state;
namespace qt {
class State;
class Gui {
public:
void foo() {
mystate.var = 3;
}
private:
State* state;
};
}
...但是还有一些叫做技术债务的东西,您正在深入借用。
相关文章:
- 写入位置0x0000000C时发生访问冲突
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 链表中写入访问冲突的未知原因
- 如何解决这个超硬恒星的创造问题
- C++中的openCV Mat访问冲突
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- C++尝试深度复制唯一指针时出现内存访问冲突
- 错误:使用通用引用的声明冲突
- 如何解决GTest和LibTorch联动冲突
- 两个运营商的一些奇怪的冲突<<
- 如何在多个线程中创建 QSql数据库连接时防止名称冲突
- C++ 中动态二维数组的访问冲突
- 从嵌套循环中的 std::list 中删除将返回访问冲突
- C++17 十六进制浮点文字单精度后缀冲突?
- 结构字段名称与 GDB 中的 STL 数组冲突
- 写入访问冲突异常
- C 全局结构创造了名称冲突