对自身的不明确函数调用
Ambiguous function call to itself
我正在尝试为 c++ 设置 mysql 连接器。当我尝试编译此代码时,此错误出现/home/cjueden/programming projects/mysqlConnect/main.cpp|23|error: call of overloaded ‘get_driver_instance()’ is ambiguous
请解释如何解决这个问题,因为我被难住了。
法典
#include <stdlib.h>
#include <iostream>
#include <mysql_connection.h>
#include <mysql_driver.h>
// #include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>
using namespace std;
using namespace sql::mysql;
int main(int argc, char const *argv[])
{
/* code */
cout << "STarting the MYSQL STUFF n";
sql::Driver *driver;
sql::Connection *con;
sql::Statement *stmt;
sql::ResultSet *res;
/* Create a connection */
driver = get_driver_instance();
con = driver->connect("tcp://192.168.1.2:3306", "root", "");
/* Connect to the MySQL test database */
con->setSchema("test");
stmt = con->createStatement();
res = stmt->executeQuery("insert into cTest (text) value ('testing and stuff')");
cout << "inserted stuffn";
res = stmt->executeQuery("SELECT 'cTest' AS _message");
while (res->next()) {
cout << "t... MySQL replies: n";
/* Access column data by alias or column name */
cout << res->getString("_message");
cout << "t... MySQL says it again: n";
/* Access column fata by numeric offset, 1 is the first column */
cout << res->getString(1);
}
return 0;
}
错误
/home/cjueden/programming projects/mysqlConnect/main.cpp||In function ‘int main(int, const char**)’:|
/home/cjueden/programming projects/mysqlConnect/main.cpp|23|error: call of overloaded ‘get_driver_instance()’ is ambiguous|
/home/cjueden/programming projects/mysqlConnect/main.cpp|23|note: candidates are:|
/usr/include/cppconn/driver.h|62|note: sql::Driver* get_driver_instance()|
/usr/include/mysql_driver.h|86|note: sql::mysql::MySQL_Driver* sql::mysql::get_driver_instance()
> 看起来 driver.h 中的 get_driver_instance() 版本在全局命名空间中,所以这里有一个修复:
driver = ::get_driver_instance();
编译器不知道要使用这两个函数中的哪一个。根据您对返回值所做的操作,我猜您打算使用 driver.h 中的返回值。
在前面加上双冒号 (::)是一种在全局命名空间中使用内容时更明确(如此函数)的方法。它解决了歧义。
另一个解决方法是删除较早的"使用命名空间 sql::mysql;"。
相关文章:
- 父类的私有函数会导致对具有相同名称和相似参数的子类中的公共函数的不明确调用
- 对重载函数find_first_not_of的不明确调用
- 调用'Node'构造函数是不明确的
- "fpclassify":对重载函数的不明确调用
- 为什么调用具有通用或 r 值引用的重载覆盖函数是不明确的?
- 重载调用是不明确的:一对内联映射作为构造函数参数
- 如果存在具有不同参数的继承成员,为什么对 C++ 结构函数的调用不明确?
- C++具有可变参数包的函数的部分模板参数推导会在 Clang 和 MSVC 中产生不明确的调用
- 对静态重载(类)函数/方法的调用是不明确的
- 这个函数调用应该不明确吗?
- 使用列表初始化的不明确构造函数调用
- 循环依赖(类对类型定义,类型定义对类),前向声明给出不明确的调用
- 为什么初始值设定项列表中的元素数会导致不明确的调用错误
- C++中来自不同基类的不明确函数
- 对自身的不明确函数调用
- C++ 中的不明确函数
- 在c++中使用[]而不是函数调用
- 显然,不明确的调用不会在GCC上导致编译错误
- 可转换的类型和不明确的调用
- 为什么使用bind而不是函数调用?