命名空间 pqxx 无法识别 - 将 libpqxx 添加到 Windows 上的 Visual Studio Post

namespace pqxx not recognized - Issues adding libpqxx to C++ Visual Studio PostgreSQL project on Windows

本文关键字:Windows 上的 Visual Post Studio 添加 libpqxx pqxx 识别 命名空间      更新时间:2023-10-16

问题

我正在尝试使用 lipqxx 与 PostgreSQL 数据库进行交互。但是,尽管 #include pqxx,但它的命名空间似乎无法识别,因此无法识别 pqxx 函数。(简化代码,下面有问题的注释:(

#include <iostream>
#include <pqxx/pqxx> // no errors indicated in Visual Studio (VS) here. 
void Classname::operator() (){ // functor method implementation
using namespace std;
using namespace pqxx; // **red underline in Visual Studio indicating "name must be a namespace"**
try{
connection C("String text"); // **red underline in VS: "identifier 'connection' is undefined"**
}catch(const std::exception &e) {
cerr << e.what() << std::endl;
}
}

我做了什么

  1. 下载了CMake(适用于Windows(和libpqxx。
  2. 按照(此视频:https://www.youtube.com/watch?v=LxHV-KNEG3k(中的说明使用 CMake 构建 lipqxx。这产生了一个名为"libpqxx"的文件夹,其中包含"bin","include","lib"和"share"子文件夹。
  3. 按照说明(在此线程上:如何将其他库添加到Visual Studio项目?(将构建的库添加到我的VS项目中

结论

我希望正确识别 pqxx 命名空间,但不确定从这里开始。我已经坚持了一段时间,非常感谢一些关于如何解决这个问题的明确指导步骤。

非常感谢

运行后我遇到了同样的问题:

vcpkg install libqpxx:x64-windows

正在运行(以管理员身份(

vcpkg integrate install

为我解决了问题

我终于找到了解决方案,方法是将名为"include"的文件夹(位于CMake进程生成的"libpqxx"目录中(添加到Visual Studio项目中,使用以下命令

项目->属性->C/C++->常规->其他包含目录->编辑(下拉选项( ->换行符(图标( ->浏览并选择"包含"文件夹->确定

#include 错误消失了,但在尝试编译程序后,我收到了以下错误(下面的代码片段(:

1>D:\Software\libpqxx\libpqxx\include\pqxx\internal\encoding_group.hxx(14,1(:错误 C2429:语言功能"嵌套命名空间定义"需要编译器标志"/std:c++17">

我通过以下方式将项目的 Visual Studio C++ Language 属性设置为 C++ 17 来解决这些问题:

项目 -> 属性 -> C/C++ -> 语言 -> C++语言标准 ->(选择下拉选项(ISO C++ 17 标准 (/std:c++17(

>编辑:(迄今为止最干净的解决方案(最干净的解决方案是使用Microsoft的vcpkg包安装程序,因为它非常简单地将libpqxx添加到Visual Studio本身,而不是基于每个项目的单个项目。

正如链接上的说明所解释的那样:

  1. 通过在名为 C:\src 的文件夹中运行以下命令来安装 vcpkg(以避免出现问题。如有必要,请创建文件夹(:

git clone https://github.com/microsoft/vcpkg

.vcpkgbootstrap-vcpkg.bat

  1. 通过输入同一文件夹中的cmd来安装libpqxx:

.vcpkgvcpkg install libpqxx:x64-windows

.vcpkgvcpkg integrate install

.vcpkgvcpkg install libpqxx

  1. 全部完成!