it-source

클래스 템플릿 std::unique_ptr을 사용하려면 MariaDB Connector C++에서 템플릿 인수가 필요합니다.

criticalcode 2023. 1. 23. 10:09
반응형

클래스 템플릿 std::unique_ptr을 사용하려면 MariaDB Connector C++에서 템플릿 인수가 필요합니다.

난 이것에 대해 문제가 있다.계속해서 다음 오류가 발생합니다.

use of class template 'std::unique_ptr' requires template arguments

한 시간 동안 찾아다녔어요.c++17을 사용하여 컴파일을 시도했지만 아직 동작하지 않았습니다.MariaDB Connector를 작동하려면 어떻게 해야 합니까?MariaDB 커넥터를 설치했습니다.나는 데비안 10에 있다.또한 clang++ v7을 사용하여 컴파일합니다.헤더에 <template>옵션을 추가하려고 했지만 동작하지 않았습니다.

다음을 사용하여 컴파일합니다.clang++ -I/usr/include/mariadb/concpp/compat -O3 -Wall -o ./getUsers ./getUsers.cpp -lmariadbcpp

#include <iostream> 
#include <cstring>
#include <mariadb/conncpp.hpp>

using namespace std;

// Main Process
int main(){
    try {
        // Instantiate Driver
        sql::Driver* driver = sql::mariadb::get_driver_instance();

        // Configure Connection
        sql::SQLString url("jdbc:mariadb://x.x.x.x:3306/todo");
        sql::Properties properties({{"user", "xxxx"}, {"password", "xxxx"}});

        // Establish Connection
        std::unique_ptr conn(driver->connect(url, properties));

        // Create a new Statement
        std::unique_ptr stmnt(conn->createStatement());
        // Execute query
        sql::ResultSet *res = stmnt->executeQuery("SELECT id, username FROM accounts");
        // Loop through and print results
        while (res->next()) {
            std::cout << res->getInt("id") << ") ";
            std::cout << res->getString("username");
        }
    }
    catch(sql::SQLException& e){
      std::cerr << "Error selecting tasks: " << e.what() << std::endl;
   }

   delete res;
   delete stmnt;
   delete conn;

   // Exit (Success)
   return 0;
}

컴파일러가 옳다: 클래스 템플릿 사용std::unique_ptr에는 template 인수가 필요합니다.템플릿 인수를 에 제공해야 합니다.std::unique_ptr유형.

// ...

//             v---------------v---- template arguments
std::unique_ptr<sql::Connection> stmnt(conn->createStatement());

// ...

//             v----------------------v----- same here
std::unique_ptr<sql::PreparedStatement> stmnt(conn->createStatement());

C++ 프로그램을 Maria에 연결하는 방법 보기DB

C++17 일반적으로 클래스 템플릿의 유형을 추론할 수 있지만,std::unique_ptr하지 않다.std::unique_ptr생성자는 정의된 방법으로 유형을 추론할 수 없으며, 공제 가이드가 추가되지 않았습니다.std::unique_ptr고의로이는 raw 어레이와 포인터가 모두 동일한 방법으로 전달되기 때문입니다.std::unique_ptr을 구별할 수 없다int*그리고.int[]삭제 방법이 다릅니다.이것은 C++의 설계 선택에 영향을 미치는 C의 기묘한 점입니다.

이제 고유한 포인터도 삭제하지만, 이것은 휴식이 아닙니다.

// Res is not a unique pointer, you still need to delete it.
delete res;

// You don't need that, those are unique pointers, remove it from your code.
delete stmnt;
delete conn;

언급URL : https://stackoverflow.com/questions/68069441/use-of-class-template-stdunique-ptr-requires-template-arguments-with-mariadb-c

반응형