将STD向量作为参考:无匹配函数要呼叫
Passing std vector as reference: no matching function to call
我看不出我的代码有什么问题。我有一个std :: vector,这是我班级的私人成员。即使编译器给出建议的错误,也没有声明为const。
(在foo.h)
private:
std::vector<std::string> tableBackup;
我正在调用函数(来自foo.cpp):
BackupTable(this->tableBackup);
此方法已进入databaseload.cpp和.h:
public:
void BackupTable(std::vector<std::string> &tableBackup);
定义为:
void DatabaseLoad::BackupTable(std::vector<std::string> &tableBackup){
//whatever...
}
从foo.cpp调用该方法时,我会遇到以下错误:
No matching function for call to 'DatabaseLoad::BackupTable(const std::vector<std::basic_string<char> > &)'
有什么问题?当前使用C 11,但我想这与此无关。
您在DatabaseLoad
对象为const
的上下文中调用BackupTable
函数,因此编译器期望呼叫const
-Reference。
如果您不打算修改向量,则应将函数声明为:
void BackupTable(const std::vector<std::string>& tableBackup);
我可以猜想您是从foo class的const方法呼叫
您似乎在符合const
的成员函数中调用BackupTable(this->tableBackup);
。这意味着this
是类型const Whatever*
,因此所有数据成员在此成员函数中也隐含地 const
合格。因此它们不能绑定到非const
参考。
您有两个理智的选择:
-
如果
BackupTable
不修改其参数,则应接受它为const &
,而不是&
。 -
如果它确实修改了其参数,则表示调用函数修改其
this
对象,因此不应将其标记为const
。
第三个选项是tableBackup
实际上是您类的实现详细信息,并且它更改的事实不会影响类的"逻辑const
NESS"。如果是这样,您可以将其标记为mutable
(这样,即使const
功能也可以对其进行修改)。同时,每当您访问可变的tableBackup
(或任何可突变的成员)时,您必须必须引入某种形式的同步机制(例如mutex)。原因是所有标准库都期望const
操作是线程安全。一个新兴的成语正在添加这样的私人成员:
mutable std::mutex mutables;
和锁定mutables
访问时(甚至只是为了阅读!)。
我认为'this'在'接头(this-> tablebackup);'中是const。您在" foo()const"函数中称为"可触发"。
- Rcpp并行无匹配函数,用于调用"转换"
- 为什么通过带有文字编号的引用调用会出现"无匹配函数"错误?
- 无匹配函数呼叫getline()
- C 线程 - 无匹配函数供呼叫
- 错误代码:无匹配函数供呼叫
- 子类/超类的"无匹配函数调用"
- 无匹配函数呼叫
- 与(C )无匹配函数
- 无匹配函数呼叫
- 无匹配函数呼叫(类,C )
- C 11无匹配函数,可以呼叫'std :: vector
- 对矢量对:无匹配函数
- C 在较旧的JSON :: NLOHMANN库中使用push_back时无匹配函数
- std::查找"错误无匹配函数"
- C 错误无匹配函数
- 将STD向量作为参考:无匹配函数要呼叫
- C :Tusing Boost Unordered_map错误:无匹配函数调用
- C 无匹配函数供呼叫:传递迭代器
- C 无匹配函数用于呼叫错误(默认为参考通过)
- LibXML2 xmlGetProp() - 无匹配函数