【发布时间】:2021-06-21 14:09:12
【问题描述】:
我对此有疑问。它一直在扔 错误:
use of class template 'std::unique_ptr' requires template arguments
我已经搜索了一个小时。我试过用c++17编译,还是不行。如何让 MariaDB 连接器工作?我安装了 MariaDB 连接器。我在 Debian 10 上。并使用 clang++ v7 进行编译。我尝试在标题中添加 选项,但仍然无效。
我正在使用这个编译: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不是类型。它是一个模板。例如std::unique_ptr<int>是一个类型。你不能用auto吗? -
当 x 是智能指针时不要调用
delete x;。 -
这是一个很好的初学者问题,而且标题在搜索引擎上是超级搜索的,所以它有更大的机会帮助别人。我对 OP 表示敬意!我编辑了问题的标题,使其更易于搜索。
-
@463035818_is_not_a_number:有人可能会考虑 C++17 CTAD,但对于
std::unique_ptr,“不可用”(构造函数不允许扣除T):-) -
@Jarod42 确实,我正在考虑 CTAD。我认为不幸的是,像“[模板名称] 不是类”这样的声明需要很长的解释,当新功能使我的 C++ 简单心智模型无效时,我不喜欢它:P