将字符串变量而不是固定字符数组传递给函数时出现编译问题
Compilation issue when passing a string variable to a function instead of a fixed character array
我正在为我的类构造函数使用初始化列表方法。我通过调用datareregistry类的getData成员函数来初始化变量,该函数提供要加载到类变量中的数据。getData方法通常通过传递一个字符数组来调用,其中包含要加载的数据的名称。
例如,初始化列表如下所示:
dataItem1(dr.getData("Pop.Stats1")),
dataItem2(dr.getData("Pop.Stats2"))
但是,由于提供名称的方式,我需要从用户类中提取数据集的名称,然后附加变量名称以传递给getData方法。像这样:
datasetName(user.getAttributeString("DataSetName")),
dataItem1(dr.getData(datasetName + ".Stats1")),
dataItem2(dr.getData(datasetName + ".Stats2"))
其中datasetName定义为std::string变量
但是,这会抛出以下错误: no matching function for call to 'DataRegistry::GetData(std::basic_string<char,std::char_traits<char>, std::allocator<char> >)'
因为getData方法的实现没有提供给我,我知道当我只是传递一个字符数组(例如"Pop.Stat1")给函数时它是有效的,我怀疑这是因为函数只接受字符数组。所以,我试了:
datasetName(user.getAttributeString("DataSetName")),
dataItem1(dr.getData(strcat(datasetName.c_str() , ".Stats1"))),
dataItem2(dr.getData(strcat(datasetName.c_str() , ".Stats2"))),
但是这会抛出错误:
error: invalid conversion from 'const char*' to 'char*'
initializing argument 1 of 'char* strcat(char*, const char*)'
我不知道出了什么问题?请建议!
几乎,尽管在c_str()
的返回值上使用strcat
会导致未定义的行为。只做:
(datasetName + ".Stats1").c_str()
所以整行看起来像
dataItem1(dr.getData((datasetName + ".Stats1").c_str())),
因为你是通过string::operator+
将".Stats1"
连接到datasetName
,然后你想让const char*
到那个字符串,所以你在operator+
的返回值上使用c_str()
。
你需要用圆括号把它括起来,因为.
比+
有更高的优先级,所以如果父级不在那里,你会调用c_str()
on "。Stats1"(代替+
的返回值),它不存在。
如果datasetName是一个std::string
,那么datasetName + "str"
的类型也是std::string
,所以你需要c_str()来获得const char*
。
dataItem1(dr.getData( (datasetName + ".Stats1").c_str() )),
dataItem2(dr.getData( (datasetName + ".Stats2").c_str() )
但是,在getData
返回后,(datasetName + ".Stats1").c_str()
的值被释放,因此确保getData
复制char数组的内容。
datasetName.c_str()
返回一个const char *
——也就是说,你不能修改它——它是一个指向std::string
内部数据的指针
此外……即使它只是一个char *
,你也不能把数据附加到它的末尾,然后称之为好——你没有为它分配的内存。
追加std::string
和,然后调用c_str()
错误信息很清楚。方法c_str返回const char*,但strcat的第一个形参是char*。
- 类C++中的函数问题(LNK2019和LNK1120错误)
- 返回不停止函数,递归函数问题?(编程练习,动态规划,Levenshtein 回溯)
- 变分模板递归构造函数问题
- C++函数问题中的数组分配
- C++中嵌套在另一个 LinkedList 中的 LinkedList 整数上的回调函数问题
- C++重载构造函数问题
- 二叉搜索树析构函数问题
- C++ vector<pair<int,int>> std::all_of() 函数问题(重定向到头文件)
- 迷宫构造函数问题 [线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)]
- C++函数问题中的 IF 语句
- 函数问题,未定义的引用错误
- C++ 指针无效函数问题
- C++函数问题 = 帮助我理解基本概念
- 由于基于接口的编程,遇到 C++ 虚拟模板函数问题
- C++二进制树递归析构函数问题
- 构造函数问题<无法读取内存>
- 构造函数问题
- C 时间函数问题
- 另一个类中的类的构造函数问题
- C与C++函数问题