在 C++ 中声明公共静态变量时出现链接错误

2023-11-26

我有一个带有可变配置参数的类。我想将它包含在其他课程中:JugadorHumano, JugadorIA, Main, PartidaClasica, PartidaMision.

#pragma once

class Configuracion
{
public:
    static int MAX_ATAQUES;
    static int DIV_TERRITORIOS;
};

int Configuracion::MAX_ATAQUES = 5;
int Configuracion::DIV_TERRITORIOS = 3;

我想要的是能够修改或读取其他类的值。我无法声明静态变量并在声明中定义它。我也不能让这些变量没有定义,因为我收到“未解决的外部”错误。

1>JugadorIA.obj : error LNK2005: "public: static int Configuracion::MAX_ATAQUES" \
         (?MAX_ATAQUES@Configuracion@@2HA) already defined in JugadorHumano.obj
1>JugadorIA.obj : error LNK2005: "public: static int Configuracion::DIV_TERRITORIOS" \
         (?DIV_TERRITORIOS@Configuracion@@2HA) already defined in JugadorHumano.obj
1>Main.obj : error LNK2005: "public: static int Configuracion::MAX_ATAQUES" \
         (?MAX_ATAQUES@Configuracion@@2HA) already defined in JugadorHumano.obj
1>Main.obj : error LNK2005: "public: static int Configuracion::DIV_TERRITORIOS" \
         (?DIV_TERRITORIOS@Configuracion@@2HA) already defined in JugadorHumano.obj
1>PartidaClasica.obj : error LNK2005: "public: static int Configuracion::MAX_ATAQUES" \
         (?MAX_ATAQUES@Configuracion@@2HA) already defined in JugadorHumano.obj
1>PartidaClasica.obj : error LNK2005: "public: static int Configuracion::DIV_TERRITORIOS" \
         (?DIV_TERRITORIOS@Configuracion@@2HA) already defined in JugadorHumano.obj
1>PartidaMision.obj : error LNK2005: "public: static int Configuracion::MAX_ATAQUES" \
         (?MAX_ATAQUES@Configuracion@@2HA) already defined in JugadorHumano.obj
1>PartidaMision.obj : error LNK2005: "public: static int Configuracion::DIV_TERRITORIOS" \
         (?DIV_TERRITORIOS@Configuracion@@2HA) already defined in JugadorHumano.obj
1>D:\Leire\My Dropbox\Carpetas compartidas\Compartidos Victor\Practicas POO II\P3\P3M10\Debug\P3M10.exe : fatal error LNK1169: one or more multiply defined symbols found

我应该怎么做才能避免这种重新定义?我想不通,也找不到类似的问题。


你应该把定义写在cpp文件中,否则,一旦你将你的头文件包含到多个C++文件(翻译单元)中,你就会得到重新定义错误。而#pragma Once 仅在一个翻译单元内运行。所以你需要一个包含以下内容的Configuration.cpp文件

#include "Configuracion.h"

int Configuracion::MAX_ATAQUES = 5;
int Configuracion::DIV_TERRITORIOS = 3;

另外,如果您的类仅包含静态成员,您可以选择考虑使用命名空间而不是类。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C++ 中声明公共静态变量时出现链接错误 的相关文章

随机推荐

  • 使用 Scala 转换 PySpark RDD

    TL DR 我在 PySpark 应用程序中有看起来像字符串 DStream 的东西 我想将其作为DStream String 到 Scala 库 不过 Py4j 不会转换字符串 我正在开发一个 PySpark 应用程序 该应用程序使用 S
  • 测试链表是否有环的最佳算法

    确定链表中是否有循环的最佳 停止 算法是什么 编辑 对时间和空间的渐近复杂性进行分析会很不错 因此可以更好地比较答案 编辑 最初的问题不是解决出度 gt 1 的节点 但有一些讨论 这个问题更像是 检测有向图中循环的最佳算法 有两个指针遍历列
  • 没有 Spring Boot 的 spring-cloud-config 客户端

    我刚刚进入 spring cloud config 并且正在研究这个基础项目 我想知道是否可能以及如何重写此客户端以不使用 Spring Boot import org springframework beans factory annot
  • 使用 YUI 压缩器时,应该合并然后缩小,还是缩小然后合并?

    我读过一些人说 如果您组合然后缩小 可能会出现问题 并且您应该始终缩小然后组合 例如 参见评论这个问题 但是 我从未见过这些问题的示例 也从未遇到过这些问题 我也找不到 YUI 开发人员的任何官方说明最佳实践是什么 由于压缩算法的工作方式
  • vsync 在什么时候“等待”(阻塞)?

    假设我有一个速度非常快的程序 如果禁用垂直同步 运行速度将超过 60fps vsync什么时候强制程序等待 当您清除屏幕或翻转缓冲区时它会阻塞吗 或者是其他我不知道的时间 顺便说一句 我指的是 OpenGL 额外问题 鉴于阻塞发生不一定是特
  • 如何通过 Facebook Android SDK 向好友发送应用请求

    目前我正在开发一个 Android 应用程序 我正在使用 Facebook SDK 它可以很好地向墙上发布消息等 但通过此 SDK 我无法向其他人发送应用程序请求 谁能帮我吗 这是我的代码片段 Bundle params new Bundl
  • 网络流量监控

    我可以在Java上创建网络流量监控程序吗 该程序必须控制从计算机程序 包括操作系统模块 到网络驱动程序并返回的所有网络流量 如果是 如何 NOTE 我不仅想要监控流量还想要控制它 我想在Windows NT上实现这样的系统 单纯依靠Java
  • Apache Camel:我可以在条件选择语句的when部分中放置多个语句吗?

    我想获得以下类型的路由 带有 XML 正文的 HTTP POST 消息进入 CAMEL 我存储了XML主体的一些参数 消息被路由到外部端点 外部端点 外部服务器 回复 gt 此时 我想检查来自外部端点的回复是否是包含等于 SUCCESS 的
  • WAMPSERVER - 仅将 PHP 版本从 5.4.3 升级到 5.5.4

    我可以升级 wampserver 下的 PHP 版本而不是整个版本吗 因为目前wampserver最新版本给出的是5 4 3版本 但是php最新版本是5 5 4 我怎样才能升级它 EDIT Wampserver 提供 5 4 3 或更旧版本
  • -XX:MaxPermSize 的作用是什么?

    具体来说 为什么它有助于解决 PermGen OutOfMemoryError 问题 另外 如果答案指向我有关 JVM 参数的文档 加分 永久空间是存储虚拟机使用的类 方法 内部化字符串和类似对象的位置 并且永远不会释放 因此得名 这篇 O
  • Rstudio pdf knit 失败并出现“环境着色未定义”错误

    当尝试使用包文章中的模板编写 PDF 时output rticles acm article我收到以下错误 LaTeX Error Environment Shaded undefined See the LaTeX manual or L
  • 使用 JS API 时,使用 Linkedin 登录不会在 iOS Safari 上触发回调

    我通过 JS API 在网站上使用 Linkedin 登录 它在我测试过的几个桌面浏览器 Windows 上的 Chrome 和 FF MacOS 上的 Safari 以及稍微过时的 Android Chrome 上运行良好 但它在 iOS
  • 如何在 Celery 中检查任务状态?

    如何检查任务是否在 celery 中运行 具体来说 我正在使用 celery django 我已阅读文档 并用谷歌搜索 但我看不到如下调用 my example task state RUNNING 我的用例是我有一个用于转码的外部 jav
  • 创建React App:在node_modules中转译外部包的JSX

    我正在尝试使用反应暂存块打包到我的反应项目中 我已经使用 create app react 命令创建了我的项目 导入包后出现以下错误 编译失败 node modules react scratchblocks src Scratchbloc
  • ExpandableListView - 隐藏没有子项的组的指示器

    In an ExpandableListView 有没有办法隐藏没有孩子的组的组指示器 试试这个 gt gt gt 对于所有项目 getExpandableListView setGroupIndicator null In xml and
  • 如果使用 cout.rdbuf() 切换缓冲区并且从不将其设置回来,会出现什么问题?

    作者提出这段代码在标题之下A bus error on my platform include
  • 使用Python Faker生成5000行的不同数据

    我想使用 Python Faker 库生成 500 行数据 但是使用下面的代码得到了重复的数据 你能指出我错在哪里吗 我相信这与 for 循环有关 提前致谢 from faker import Factory import pandas a
  • Python 观察者模式:示例、技巧? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 有没有用 Python 实现的 GoF Observer 的示例 我有一些代码 当前有一些通过关键类进行调试的代码 如果设置了 magic env 则当前会生成到 stderr
  • 重命名分支然后在新分支中重用该名称?

    目前我们有这样的分支结构 开发 gt 发布 我想改变它 使它看起来像TFS 分支指导文件称为 基本分支机构计划 看起来像这样 Develop Release 我本来打算这样做 将 Develop 重命名为 Main 创建 Main gt R
  • 在 C++ 中声明公共静态变量时出现链接错误

    我有一个带有可变配置参数的类 我想将它包含在其他课程中 JugadorHumano JugadorIA Main PartidaClasica PartidaMision pragma once class Configuracion pu