namespace pqxx not recognized - 将 libpqxx 添加到 C++ Visual Studio Windows 上的 PostgreSQL 项目时出现问题
namespace pqxx not recognized - Issues adding libpqxx to C++ Visual Studio PostgreSQL project on Windows
问题
我正在尝试使用 lipqxx 与 PostgreSQL 数据库进行交互。然而,尽管 #include-ing 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;
}
}
我做了什么
- 已下载 CMake(用于 Windows)和 libpqxx。
- 按照(本视频:https://www.youtube.com/watch?v=LxHV-KNEG3k)中的说明使用 CMake 构建 lipqxx。这产生了一个名为 "libpqxx" 的文件夹,其中包含 "bin"、"include"、"lib" 和 "share" 子文件夹。
- 按照说明(在此线程上:How to add additional libraries to Visual Studio project?)将构建的库添加到我的 VS 项目
结论
我希望 pqxx 名称空间能够被正确识别,但我不确定从这里到哪里去。我已经坚持了很长一段时间,非常感谢关于如何解决这个问题的一些明确的指导步骤。
非常感谢
我终于找到了解决这个问题的方法,方法是使用
项目 -> 属性 -> C/C++ -> 常规 -> 附加包含目录 -> 编辑(下拉选项) -> 换行 (图标) -> 浏览并select "include " 文件夹 -> 确定
#include 错误消失了,但我在尝试编译我的程序后收到以下错误(下面的片段):
1>D:\Software\libpqxx\libpqxx\include\pqxx\internal\encoding_group.hxx(14,1): error C2429: language feature 'nested-namespace-definition' requires compiler flag '/std:c++17'
我通过将项目的 Visual Studio C++ 语言 属性 设置为 C++ 17 解决了这些问题:
项目 -> 属性 -> C/C++ -> 语言 -> C++ 语言标准 -> (select 下拉选项) ISO C++ 17 标准 (/std:c++17)
编辑:(迄今为止最干净的解决方案)
最干净的解决方案是使用 Microsoft 的 vcpkg 软件包安装程序,因为它 非常简单地 将 libpqxx 添加到 Visual Studio 本身,而不是单个项目每个项目的基础。
如 link 上的说明所述:
- 通过 运行 在 cmd 中从名为 C:\src 的文件夹中执行以下命令安装 vcpkg(以避免出现问题。必要时创建文件夹):
git clone https://github.com/microsoft/vcpkg
.\vcpkg\bootstrap-vcpkg.bat
- 通过在同一文件夹中输入 cmd 来安装 libpqxx:
.\vcpkg\vcpkg install libpqxx:x64-windows
.\vcpkg\vcpkg integrate install
.\vcpkg\vcpkg install libpqxx
- 全部完成!
我在 运行 之后遇到了同样的问题:
vcpkg install libqpxx:x64-windows
运行(作为管理员)
vcpkg integrate install
为我解决了问题
问题
我正在尝试使用 lipqxx 与 PostgreSQL 数据库进行交互。然而,尽管 #include-ing 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;
}
}
我做了什么
- 已下载 CMake(用于 Windows)和 libpqxx。
- 按照(本视频:https://www.youtube.com/watch?v=LxHV-KNEG3k)中的说明使用 CMake 构建 lipqxx。这产生了一个名为 "libpqxx" 的文件夹,其中包含 "bin"、"include"、"lib" 和 "share" 子文件夹。
- 按照说明(在此线程上:How to add additional libraries to Visual Studio project?)将构建的库添加到我的 VS 项目
结论
我希望 pqxx 名称空间能够被正确识别,但我不确定从这里到哪里去。我已经坚持了很长一段时间,非常感谢关于如何解决这个问题的一些明确的指导步骤。
非常感谢
我终于找到了解决这个问题的方法,方法是使用
项目 -> 属性 -> C/C++ -> 常规 -> 附加包含目录 -> 编辑(下拉选项) -> 换行 (图标) -> 浏览并select "include " 文件夹 -> 确定
#include 错误消失了,但我在尝试编译我的程序后收到以下错误(下面的片段):
1>D:\Software\libpqxx\libpqxx\include\pqxx\internal\encoding_group.hxx(14,1): error C2429: language feature 'nested-namespace-definition' requires compiler flag '/std:c++17'
我通过将项目的 Visual Studio C++ 语言 属性 设置为 C++ 17 解决了这些问题:
项目 -> 属性 -> C/C++ -> 语言 -> C++ 语言标准 -> (select 下拉选项) ISO C++ 17 标准 (/std:c++17)
编辑:(迄今为止最干净的解决方案)
最干净的解决方案是使用 Microsoft 的 vcpkg 软件包安装程序,因为它 非常简单地 将 libpqxx 添加到 Visual Studio 本身,而不是单个项目每个项目的基础。
如 link 上的说明所述:
- 通过 运行 在 cmd 中从名为 C:\src 的文件夹中执行以下命令安装 vcpkg(以避免出现问题。必要时创建文件夹):
git clone https://github.com/microsoft/vcpkg
.\vcpkg\bootstrap-vcpkg.bat
- 通过在同一文件夹中输入 cmd 来安装 libpqxx:
.\vcpkg\vcpkg install libpqxx:x64-windows
.\vcpkg\vcpkg integrate install
.\vcpkg\vcpkg install libpqxx
- 全部完成!
我在 运行 之后遇到了同样的问题:
vcpkg install libqpxx:x64-windows
运行(作为管理员)
vcpkg integrate install
为我解决了问题