0

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 stuff\n";
  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()
4

1 に答える 1

0

driver.h の get_driver_instance() のバージョンがグローバル名前空間にあるように見えるため、ここに 1 つの修正を示します。

driver = ::get_driver_instance();

コンパイラは、2 つの関数のどちらを使用するかを認識していません。戻り値で何をしているのかに基づいて、driver.h のものを使用するつもりだったと思います。

ダブルコロン (::) を先頭に追加することは、(この関数のように) グローバル名前空間で何かを使用するときに、より明示的にする方法です。あいまいさを解決します。

別の修正は、以前の「using namespace sql::mysql;」を削除することです。

于 2013-10-02T02:49:16.813 に答える