【问题标题】:Rcpp string initialization constructor not found [closed]未找到 Rcpp 字符串初始化构造函数 [关闭]
【发布时间】:2023-04-09 14:36:01
【问题描述】:

编辑:错误的来源是错字。很抱歉造成混乱,但感谢许多在 cmets 中提供有价值的外围建议的人。

以下代码

#include <iostream>
#include <string>
#include <cmath>
#include <math.h>
#include <cfloat>
#include <Rcpp.h>
#include <cassert>
using namespace Rcpp;

int test(){
  std::string s(2,"");
  return 1;
}

引发以下 IDE 错误:

no matching constructor for initialization of 'std::string'

在 R 中运行代码会产生无法表达的 seg 错误,但我希望以上内容就足够了。我看到this discussion 的共识是,当使用的 clang 版本过时(clang++3.7 是传递的版本)时,可能会发生这种情况。参考了这个discussion 并看到我的机器(macos)正在运行以下clang:

Apple clang version 11.0.3 (clang-1103.0.32.59)

我不确定我遇到的问题是否与上述讨论中的问题重复。

如果我不得不猜测,问题的根源可能是编译器版本、rcpp 或库冲突。

编辑:herehere 是让我相信 std 附带默认字符串构造函数的来源(请参阅后面的填充 (6))

【问题讨论】:

  • 你想用你的字符串构造函数做什么?您认为哪些重载应该与 (int, const char*) 参数列表匹配?
  • 顺便说一句,您不需要所有额外的包含语句,因为包括 Rcpp.h 会引入这些语句——string 肯定会这样做。
  • 投票失败,因为 OP 对 ""'' 感到困惑(请参阅下面的答案)。

标签: c++ clang rcpp


【解决方案1】:

嗯?

  std::string s(2,"");

'std::string'的初始化没有匹配的构造函数

正如它在错误消息中所说的那样,std::string 没有与您的 int, char const * 参数匹配的 constructor

如果我不得不猜测,问题的根源可能是编译器版本、rcpp 或库冲突。

不,问题是没有与您的std::string 初始化尝试匹配的构造函数。如果您尝试进一步简化示例,即删除除您实际使用的 (&lt;string&gt;) 之外的所有 includes,这可能会变得很明显。

【讨论】:

  • 您好 DevSolar,感谢您的快速回答。我用我在推测存在这样的构造函数时提到的来源编辑了答案
  • @JoshPurtell:您指出的构造函数变体将 character 作为第二个参数,而不是字符串文字。那必须是s(2, '\0')(这是初始化的一个值得商榷的选择;你为什么想要那个?)。 -- 旁注:cppreference.com 通常被认为是比 cplusplus.com 更高质量的资源,cplusplus.com 在历史上有些地方只是稍微有点错误......
  • 好的,完美。自从我使用 c++ 以来已经有一段时间了,' 和 '' 之间的区别让我忘记了。我认为(?)我最好删除答案,但如果您愿意,我会对其进行大量编辑以反映错误的基本性质,以便您的答案不会丢失,请告诉我。
  • @JoshPurtell:不,很好。我会投票赞成关闭作为“错字”,可能就是这样。您不应该删除已经回答的问题。 SO 引擎对此不以为然。
  • @JoshPurtell:呃……呃……C++ 非常不是一种“试错”语言……只是因为它不再在你的脸上爆炸了并不意味着 UB 消失了,和/或以后不会在你的脸上爆炸。我严重怀疑通过这样的初始化“修复”的东西是正确的代码。也许发布另一个问题...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-23
  • 1970-01-01
  • 2011-05-25
  • 2016-07-27
相关资源
最近更新 更多