从另一个类访问静态成员函数

2024-04-05

我在 C++ 类中有一个静态 stl 映射,并且有另一个静态成员函数来返回指向映射中对象的常量指针。该映射对于该类中的所有对象都是通用的。

唯一的问题是,我需要搜索这个映射并从另一个类(位于不同的 .cpp/.h 文件中)设置它,当我尝试在 vs2010 中编译它们时,我得到了未解析的外部符号。这些方法在 Timestream 类中定义为

static void setRoomList(std::map<std::string, RoomDescription> rl);
static RoomDescription * getRoom(std::string ref); 

这两个函数都是公共的,因此不应该存在访问问题。这些函数在 Timestream.cpp 文件中正常定义,即

RoomDescription * Timestream::getRoom(std::string ref)
{
    std::map<std::string, RoomDescription>::iterator cIter= roomList.find(ref);

    if(cIter!=roomList.end())
        return &(cIter->second);

    return NULL;
}

我想这样称呼它

RoomDescription *r =Timestream::getRoom("Bathroom")

来自其他班级。网络上的其他帖子似乎谈论使用 extern,但我对此不确定。我不明白为什么这与从不同类调用任何其他成员函数有什么不同?

谢谢, 詹姆士

编辑: 是的,我已经宣布了

std::map<std::string, RoomDescription> roomList;

位于 Timestream.cpp 文件的顶部。在标头中它被定义为

static  std::map<std::string, RoomDescription> roomList;

我已将 RoomDescription 的标头包含在我尝试从中调用这些方法的类的标头中。

我得到的错误是这样的

Import.obj :错误 LNK2019:无法解析的外部符号“public: static void __cdecl Timestream::setRoomList(class std::map,class std::allocator >,class RoomDescription,struct std::less,class std::allocator >> ,class std::allocator,class std::allocator > const ,class RoomDescription> > >)" (?setRoomList@Timestream@@SAXV?$map@V?$basic_string@DU?$char_traits@D@std@@V ?$allocator@D@2@@std@@VRoomDescription@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2 @V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@VRoomDescription@@@std@@@2 @@std@@@Z) 在函数“public: int __thiscall Import::getRoomData(void)”中引用 (?getRoomData@Import@@QAEHXZ)

Timestream.obj:错误 LNK2001:无法解析的外部符号“私有:静态类 std::map,类 std::allocator >,类 RoomDescription,struct std::less,类 std::allocator >>,类 std::allocator,类 std::allocator > const ,类 RoomDescription> > > Timestream::roomList" (?roomList@Timestream@@0V?$map@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@ D@2@@std@@VRoomDescription@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$分配器@D@2@@std@@@2@V?$分配器@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$分配器@D@2@@std@@VRoomDescription@@@std@@@2@@std@ @A)


您需要添加:

std::map<std::string, RoomDescription> Timestream::roomList;

to Timestream.cpp,或者任何你的实现文件的名称。

这会define静态成员。在头文件中,您只需declare it.

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

从另一个类访问静态成员函数 的相关文章

  • 运行应用程序时.NET 3.5 JIT 不工作

    以下代码在 Visual Studio 内部运行该版本和在 Visual Studio 外部运行该版本时提供不同的输出 我正在使用 Visual Studio 2008 并面向 NET 3 5 我也尝试过 NET 3 5 SP1 在 Vis
  • 不同提供商的相同 EDMX 文件

    我正在开发一个项目 其中有一个本地数据库 SQL CE 在不存在与服务器的连接的情况下用作缓冲区 在服务器上我想使用相同的数据库布局 当然 我想使用服务器和客户端上可用的 Common dll 中的相同 EDMX 文件 在客户端中 我有一个
  • 获取 TextBox 中的文本行数

    我试图通过标签显示文本框中的文本行数 但是 问题是如果最后一行为空 标签必须显示没有空行的行号 例如 如果它们有 5 行 最后一行为空 则标签应将行数显示为 4 Thanks private void txt CurrentVinFilte
  • 显示 div 内的用户名列表

    我是 jQuery 新手 在我的项目中 我创建了一个类User其中代码如下所示 static ConcurrentDictionary
  • C# - Visual Studio 中的 System.OutOfMemoryException

    我遇到问题 当我右键单击 Visual Studio 中的主窗体并转到 视图设计器 时 出现错误 它说 引发了 System OutOfMemoryException 类型的异常 堆栈跟踪 at System Reflection Asse
  • 如何使用最小起订量模拟私有只读 IList 属性

    我试图嘲笑这个列表 private readonly IList
  • 是否有可能将 *.pdb 文件包含到发布版本中以查看错误行号?

    我做了一个项目 所有设置都是默认的 当我在调试模式 构建配置 调试 下运行它并遇到异常时 它转储到我的自定义日志记录机制 其中包含错误行号 但是当我运行发布构建时 记录相同的异常 没有行号 只有方法抛出和记录调用堆栈 是否有可能在发布配置
  • std::bind2nd 和 std::bind 与二维数组和结构数组

    我知道 C 有 lambda 并且 std bind1st std bind2nd 和 std bind 已弃用 然而 从C 的基础开始 我们可以更好地理解新特性 所以 我从这个非常简单的代码开始 使用int 数组s 第一个例子 与std
  • 如何检查号码是否只有唯一的数字?

    例如 2345 是唯一的数字 因为没有数字显示两次 但 3324 不是唯一的数字 因为 3 出现了两次 我尝试使用 但我 代码 显示但我没有得到数字我得到了数字 编辑 你不能使用字符串 number 10 number 100 number
  • 静态 OpenCV 库中未定义的引用

    我有一个使用 OpenCV 3 1 的 C 项目 并且使用共享库可以正常工作 但现在我想使用静态库 位于项目目录中的文件夹中 来编译它 因为我希望能够在未安装 OpenCV 的情况下导出它 如果需要还可以编辑和重新编译 这次我重新编译了 O
  • ASMX Web 服务,测试表单仅在本地计算机上适用于一种 WebMethod

    我有一个正在测试的 ASMX WebService 并且在大多数方法上我都可以使用测试表单进行测试 然而 我确实有一种方法 测试表上写着 The test form is only available for requests from t
  • 如何在 ASP.NET Core 6.0 Web API 项目中启用 cors?

    在我的 ASP NET Core 6 0 Web API 项目中配置了 CORS 但预检请求收到 http 405 错误 换句话说 不允许使用 HTTP OPTION 看起来 cors 没有启用 我见过的例子config EnableCor
  • 如何从 C# 调用 F# 类型扩展(静态成员函数)

    FSharp 代码的结构如下 我无法控制源代码 namespace FS
  • PartialView Action 正在调用自身

    我有 MVC 应用程序 它用于从主视图 ProductMaster 将 ProductAreaGrid 列表显示为 PartialView 并且它将在局部视图内将 CreateProductArea 作为 PartialView 我的 Gr
  • 应用新设置时如何防止 GraphicsDevice 被丢弃?

    我的游戏窗口允许手动调整大小 这意味着它可以像任何其他普通窗口一样通过拖动其边缘来调整大小 游戏还利用了RenderTarget2D rt2d 在主 Draw 方法中设置主渲染目标 GraphicsDevice SetRenderTarge
  • 禁用实体框架的默认值生成(Code First)

    我数据库中有一个列不能为空 我想将其设置为默认值在数据库中 问题是实体框架似乎自己创建了一个默认值 例如 int gt 0 并且完全忽略了数据库中的默认值约束 有没有办法禁用实体框架的默认值 我发现您可以使用以下属性来装饰您的字段 Data
  • 使用联合对 IP 地址进行多种解释?

    在工作中 我们使用以下构造来将 IP 地址解释为 4 字节数组或 32 位整数 union IPv4 std uint32 t ip std uint8 t data 4 这很好用 但是读完这本书的第 97 章 不要使用联合来重新解释表示
  • 如何创建实体集或模型而不在数据库中创建相应的表 - 实体框架

    我的 sqlserver 数据库中有一个存储过程 它返回多个结果集 我正在使用 msdn 中的以下链接从实体框架中的 SP 读取多个结果集 https msdn microsoft com en us library jj691402 v
  • 有没有办法在 C# 中仅通过文件名查找文件?

    我们现在使用绝对路径或相对路径在 C 应用程序中查找文件 如果文件位于当前工作目录下或 路径 之一下 有没有办法仅通过名称查找文件 使用绝对路径不好 使用相对路径也不够好 因为我们可能通过重命名或移动项目文件夹来更改项目结构 如果我们的代码
  • 线程安全的有限大小队列,不使用锁

    我正在尝试编写一个主题队列 但遇到死锁和其他多线程问题 我想用Interlocked CompareExchange避免lock用法 但这段代码并没有按预期工作 它只是擦除整个队列 我在这里做错了什么 public class FixedS

随机推荐

  • 当另一个下拉列表中的值发生变化时加载一个下拉列表的存储

    我有 2 个下拉菜单 根据在一个下拉列表中选择的值 我需要使用 JSON 进行 AJAX 调用来检索值并在其他下拉列表中可用 这需要在 EXTJS 中完成 我尝试了以下代码 FUNCTION NAME Field on select fun
  • powershell 2.0 命令行重定向

    我正在寻找以下差异的解释 给出以下 powershell 脚本foo ps1 write host normal write error error write host yay 运行它 C gt powershell foo ps1 gt
  • 在 tkinter 中的函数内调用函数

    打电话时rest来自按钮的功能 然后start函数被调用并每秒继续打印值但是当我再次调用时rest函数start再次调用函数 但这次启动函数以 2 倍速度打印值 依此类推 但我不想以 2 倍速度打印值 我正在做一个小项目 我遇到了这类问题
  • 为什么 Spring Data MongoDB 1.5.2 会因 NoSuchMethodError 失败?

    我似乎无法使用 spring mongodb 初始化最基本的 MongoTemplate 以下是我的 POM 中的相关摘录
  • 如何将 SqLite 与 BlackBerry OS 4.5 一起使用?

    我目前在 BlackBerry 中使用持久存储 我想在 BlackBerry OS 4 5 中使用 SqLite 数据库 但我找不到任何相关教程 我可以在 BlackBerry OS 4 5 中使用 SqLite 还是需要其他版本的 Bla
  • Android 小部件的两个按钮以不同的意图调用相同的 Activity

    我在 Android 中有一个带有两个按钮的主屏幕小部件 两个按钮都应该调用相同的活动 类 只需使用不同的意图加上意图附加 即可知道哪个按钮调用了该类 目前只有 Button1 正在工作并调用该活动 我还在被调用的活动中收到键值 我怎样才能
  • 终端中的 LESS css 编译器帮助

    我使用 Ubuntu 13 04 Linux 我已经安装了node和npm 使用 npm 我通过终端下载的内容更少 我在我的简单 HTML CSS 项目中使用了它 纯前端 它不是 Ruby 或 Nodejs 项目 当我这样做时 lessc
  • Prolog 追加与剪切运算符

    当我们使用append和cut操作符时会出现什么问题 append2 L L append2 H T L H TL append2 T L TL 我尝试了几种不同的输入 但总是成功 append2 1 2 5 L L 1 2 5 appen
  • XPath 中字符串的连接函数

    我正在尝试使用 XPath 获取完整的地址 我是 XPath 新手 这是我到目前为止所做的 p class adr span class street address 2222 Warnar Ave span span class coun
  • FacebookDisplayName 有何用途?

    我们目前正在更改使用 Facebook SDK 进行登录的应用程序的名称 实际上没有其他任何操作 这意味着对于未更新的用户 Facebook 应用程序的名称将与FacebookDisplayName 在我的测试过程中 我找不到对价值的任何影
  • 将 Access-Control-Allow-Origin 添加到 PHP 标头

    我正在尝试解决 WebGL 应用程序上的 CORS 限制 我有一个可以解析 URL 并返回图像的 Web 服务 由于此 Web 服务未启用 CORS 因此我无法使用返回的图像作为纹理 我本来打算 编写 PHP 脚本来处理图像请求 图像请求将
  • Java 中的树实现

    我得到了以下树 然后我们被告知使用last child previous sibling方法来改变这三个的实现 结果如下 我现在正在研究 Java 实现 以在这棵树上执行不同的功能 我们有一个 Tree 接口和一个 TreeNode 接口
  • 如何在java中查找自1970年以来的秒数

    我正在处理一个实时项目 其中我需要查找自 1970 年 1 月 1 日以来的秒数 我使用以下代码来查找秒数 但给出了错误的结果 代码如下 public long returnSeconds int year int month int da
  • 自定义Zuul异常

    我在 Zuul 中有一个场景 其中 URL 路由的服务也可能已关闭 因此 响应正文会在 JSON 正文响应中抛出 500 HTTP Status 和 ZuulException timestamp 1459973637928 status
  • Node webpack 开发服务器在 vuejs 项目中失败“无法获取/”

    当我通过 webpack 运行节点开发服务器时 我的浏览器上收到一条非常无用的消息 Cannot GET 我正在使用以下内容构建 Vuejs 应用程序 Vue Js 的结构是由这个决定的Vue模板 http vuejs templates
  • 相当于python3中的python2 chr(int)

    python2 print chr 174 python3 print chr 174 我正在寻找 python2 中 chr 的等效项 我相信这是由于 python 3 返回 unicode 字符而不是 ASCII 实际上 在Py3中ch
  • C 如何计算没有浮点精度的百分比(千)

    如何将 2 个 int 值的百分比计算为表示百分比的 int 值 更精确的是千分之一 背景 目的 使用没有 FPU 的处理器 浮点计算所需的时间要长 100 倍 int x 25 int y 75 int resultPercentage
  • Ionic APP 中的 Disqus

    我正在尝试在我的 ionic 应用程序中实现 disqus 评论 我知道我必须将其托管在其设置的域上 我相信我已正确配置该域 欢迎任何帮助 这是我的 app js 中离子应用程序的代码 scope showComments function
  • 为什么我可以使用 bot.get_user 函数获取一些用户,但不能获取其他用户? [不和谐.py]

    我当时正在忙着一天的事情并做学校作业 我去了我的不和谐服务器来检查一天中声誉和排行榜进度如何变化 当我使用该命令时 我收到错误 Nonetype object has no attribute display name 所以我很自然地转到运
  • 从另一个类访问静态成员函数

    我在 C 类中有一个静态 stl 映射 并且有另一个静态成员函数来返回指向映射中对象的常量指针 该映射对于该类中的所有对象都是通用的 唯一的问题是 我需要搜索这个映射并从另一个类 位于不同的 cpp h 文件中 设置它 当我尝试在 vs20