클래스 템플릿 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
'it-source' 카테고리의 다른 글
Python에서 Base64 데이터를 어떻게 디코딩합니까? (0) | 2023.01.23 |
---|---|
MariaDB - 올바른 비밀번호를 사용하여 Dbeaver에서 MariaDB 인스턴스에 연결할 수 없습니다. (0) | 2023.01.23 |
브라우저에서 JSON 개체를 파일로 다운로드합니다. (0) | 2023.01.23 |
vue + typescript에서 mapState 사용 (0) | 2023.01.23 |
POST를 통해 같은 이름의 여러 입력을 php로 입력 (0) | 2023.01.23 |