跳转至内容

现代C++ | mcpp论坛

现代C++爱好者论坛 - 官网 | 开源

48 主题 216 帖子

子版块

  • 0 赞同
    1 帖子
    520 浏览
    尚无回复
  • 0 赞同
    7 帖子
    2k 浏览
    SPeakS

    @ziyikong 今天或明天我也会再制作一个windows上练习代码环境搭建的视频细节

  • [安装问题]安装本地环境时,vscode 编译器设置错误

    已锁定 已解决
    1
    0 赞同
    1 帖子
    15 浏览
    尚无回复
  • [windows系统][环境配置] d2x命令好像无法使用?

    5
    0 赞同
    5 帖子
    81 浏览
    Mudrock-JOM

    好像还是不行?
    屏幕截图 2026-03-06 094952.png

  • xlings安装完成,但是项目安装提示失败

    7
    0 赞同
    7 帖子
    91 浏览
    SPeakS

    @sleepyiang 找到原因, 这个时项目里d2x buildtools的bug
    现在已经修复了

    https://github.com/mcpp-community/d2mcpp/pull/40

    可以使用 d2x install d2mcpp 获取最新的项目 再尝试尝试

    注: 应该不是上面说的版本原因

  • C/C++的神奇"语法", 趋向操作 `x --> 0`

    3
    1 赞同
    3 帖子
    73 浏览
    unamed-coderU

    我怎么说没见过,原来是两个运算符的组合:-- 自减运算符和 > 大于运算符。

    先判断 x 是否大于0,若成立则 x 自减。这样 x 就会像 0 趋近,直到不大于 0。这种写法其实就是 (x--) > 0……

  • dx2命令无效

    6
    0 赞同
    6 帖子
    48 浏览
    SPeakS

    具体参考

    http://forum.d2learn.org/post/774

    e0284a32-24d0-4bd1-98a7-df45b10c84e5-image.png

  • 刚学 C++ 模块想要尝试声明与定义分离,结果失败了

    已移动
    4
    0 赞同
    4 帖子
    113 浏览
    lost-42L

    看起来像是 ConsolePrint 和 encipherment 的问题, 错误提示有找不到模块 ConsolePrint 以及 encipherment 不是个命名空间.
    我没有用过这个库, 不确定是不是需要额外配置, 可以先替换成 std::println 试试?

  • C++ 模块中静态全局变量的消失问题

    2
    1 赞同
    2 帖子
    50 浏览
    woshinideba1425W

    错误例子(我写的)

    module; #include "httplib.h" export module mcp.compat.httplib; export namespace mcp { using HttpClient = httplib::Client; using DataSink = httplib::DataSink; using Headers = httplib::Headers; using HttpRequest = httplib::Request; using HttpResponse = httplib::Response; using HttpServer = httplib::Server; #ifdef MCP_SSL using SslServer = httplib::SSLServer; #endif }

    正确例子(官方库提供的)

    module; /* * Headers */ #ifdef _WIN32 #ifndef _CRT_SECURE_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS #endif //_CRT_SECURE_NO_WARNINGS #ifndef _CRT_NONSTDC_NO_DEPRECATE #define _CRT_NONSTDC_NO_DEPRECATE #endif //_CRT_NONSTDC_NO_DEPRECATE #if defined(_MSC_VER) #if _MSC_VER < 1900 #error Sorry, Visual Studio versions prior to 2015 are not supported #endif #pragma comment(lib, "ws2_32.lib") #ifndef _SSIZE_T_DEFINED #define _SSIZE_T_DEFINED #endif #endif // _MSC_VER #ifndef S_ISREG #define S_ISREG(m) (((m) & S_IFREG) == S_IFREG) #endif // S_ISREG #ifndef S_ISDIR #define S_ISDIR(m) (((m) & S_IFDIR) == S_IFDIR) #endif // S_ISDIR #ifndef NOMINMAX #define NOMINMAX #endif // NOMINMAX #include <io.h> #include <winsock2.h> #include <ws2tcpip.h> #if defined(__has_include) #if __has_include(<afunix.h>) // afunix.h uses types declared in winsock2.h, so has to be included after it. #include <afunix.h> #define CPPHTTPLIB_HAVE_AFUNIX_H 1 #endif #endif #ifndef WSA_FLAG_NO_HANDLE_INHERIT #define WSA_FLAG_NO_HANDLE_INHERIT 0x80 #endif #else // not _WIN32 #include <arpa/inet.h> #if !defined(_AIX) && !defined(__MVS__) #include <ifaddrs.h> #endif #ifdef __MVS__ #include <strings.h> #ifndef NI_MAXHOST #define NI_MAXHOST 1025 #endif #endif #include <net/if.h> #include <netdb.h> #include <netinet/in.h> #ifdef __linux__ #include <resolv.h> #undef _res // Undefine _res macro to avoid conflicts with user code (#2278) #endif #include <csignal> #include <netinet/tcp.h> #include <poll.h> #include <pthread.h> #include <sys/mman.h> #include <sys/socket.h> #include <sys/un.h> #include <unistd.h> #ifndef INVALID_SOCKET #define INVALID_SOCKET (-1) #endif #endif //_WIN32 #if defined(__APPLE__) #include <TargetConditionals.h> #endif #include <algorithm> #include <array> #include <atomic> #include <cassert> #include <cctype> #include <chrono> #include <climits> #include <condition_variable> #include <cstdlib> #include <cstring> #include <errno.h> #include <exception> #include <fcntl.h> #include <functional> #include <iomanip> #include <iostream> #include <list> #include <map> #include <memory> #include <mutex> #include <random> #include <regex> #include <set> #include <sstream> #include <string> #include <sys/stat.h> #include <system_error> #include <thread> #include <unordered_map> #include <unordered_set> #include <utility> #if defined(CPPHTTPLIB_USE_NON_BLOCKING_GETADDRINFO) || \ defined(CPPHTTPLIB_USE_CERTS_FROM_MACOSX_KEYCHAIN) #if TARGET_OS_MAC #include <CFNetwork/CFHost.h> #include <CoreFoundation/CoreFoundation.h> #endif #endif // CPPHTTPLIB_USE_NON_BLOCKING_GETADDRINFO or // CPPHTTPLIB_USE_CERTS_FROM_MACOSX_KEYCHAIN #ifdef CPPHTTPLIB_OPENSSL_SUPPORT #ifdef _WIN32 #include <wincrypt.h> // these are defined in wincrypt.h and it breaks compilation if BoringSSL is // used #undef X509_NAME #undef X509_CERT_PAIR #undef X509_EXTENSIONS #undef PKCS7_SIGNER_INFO #ifdef _MSC_VER #pragma comment(lib, "crypt32.lib") #endif #endif // _WIN32 #if defined(CPPHTTPLIB_USE_CERTS_FROM_MACOSX_KEYCHAIN) #if TARGET_OS_MAC #include <Security/Security.h> #endif #endif // CPPHTTPLIB_USE_NON_BLOCKING_GETADDRINFO #include <openssl/err.h> #include <openssl/evp.h> #include <openssl/ssl.h> #include <openssl/x509v3.h> #if defined(_WIN32) && defined(OPENSSL_USE_APPLINK) #include <openssl/applink.c> #endif #include <iostream> #include <sstream> #if defined(OPENSSL_IS_BORINGSSL) || defined(LIBRESSL_VERSION_NUMBER) #if OPENSSL_VERSION_NUMBER < 0x1010107f #error Please use OpenSSL or a current version of BoringSSL #endif #define SSL_get1_peer_certificate SSL_get_peer_certificate #elif OPENSSL_VERSION_NUMBER < 0x30000000L #error Sorry, OpenSSL versions prior to 3.0.0 are not supported #endif #endif // CPPHTTPLIB_OPENSSL_SUPPORT #ifdef CPPHTTPLIB_MBEDTLS_SUPPORT #include <mbedtls/ctr_drbg.h> #include <mbedtls/entropy.h> #include <mbedtls/error.h> #include <mbedtls/md5.h> #include <mbedtls/net_sockets.h> #include <mbedtls/oid.h> #include <mbedtls/pk.h> #include <mbedtls/sha1.h> #include <mbedtls/sha256.h> #include <mbedtls/sha512.h> #include <mbedtls/ssl.h> #include <mbedtls/x509_crt.h> #ifdef _WIN32 #include <wincrypt.h> #ifdef _MSC_VER #pragma comment(lib, "crypt32.lib") #endif #endif // _WIN32 #if defined(CPPHTTPLIB_USE_CERTS_FROM_MACOSX_KEYCHAIN) #if TARGET_OS_MAC #include <Security/Security.h> #endif #endif // CPPHTTPLIB_USE_CERTS_FROM_MACOSX_KEYCHAIN // Mbed TLS 3.x API compatibility #if MBEDTLS_VERSION_MAJOR >= 3 #define CPPHTTPLIB_MBEDTLS_V3 #endif #endif // CPPHTTPLIB_MBEDTLS_SUPPORT // Define CPPHTTPLIB_SSL_ENABLED if any SSL backend is available // This simplifies conditional compilation when adding new backends (e.g., // wolfSSL) #if defined(CPPHTTPLIB_OPENSSL_SUPPORT) || defined(CPPHTTPLIB_MBEDTLS_SUPPORT) #define CPPHTTPLIB_SSL_ENABLED #endif #ifdef CPPHTTPLIB_ZLIB_SUPPORT #include <zlib.h> #endif #ifdef CPPHTTPLIB_BROTLI_SUPPORT #include <brotli/decode.h> #include <brotli/encode.h> #endif #ifdef CPPHTTPLIB_ZSTD_SUPPORT #include <zstd.h> #endif export module httplib; export extern "C++" { #include "httplib.h" }

    当你试图将一个非模块化的第三方库(尤其是像 httplib 这种带全局状态或初始化逻辑的库)封装进模块时:

    不要尝试只导出部分类型:除非你非常确定该库没有全局初始化逻辑(Constructor static guards)。

    使用 export extern "C++":这是将传统头文件“模块化”的最标准、最稳妥做法。

    环境对齐:在 module; 之后,务必把该库依赖的所有系统宏(如 _WIN32, WIN32_LEAN_AND_MEAN 等)都写清楚。

  • mcpp在远程连接ubuntu的vscode中使用d2x checker命令,编辑器无法识别代码

    已锁定 已解决
    4
    0 赞同
    4 帖子
    112 浏览
    fillSeaF

    @sunrisepeak 解决了👍

  • 【C++11】异步操作

    2
    1 赞同
    2 帖子
    535 浏览
    SPeakS

    总结很好

  • C++ 包管理器选哪个?

    已移动
    5
    0 赞同
    5 帖子
    142 浏览
    NekoycodeN

    除了vcpkg 和 xmake(xrepo) 的话, conan 比较受欢迎

  • MC++编码风格探讨 - 标识符命名风格

    6
    1 赞同
    6 帖子
    213 浏览
    sunrisepeakS

    @SkyWingF 后面给项目增加一个 类似 "最佳实践" 章节总结这些:

    类型别名用using 代替 typedef 引用的使用 尽量少使用宏 非必要不使用 属性标识 [[nodiscard]], [[deprecated]] ...
  • 1 赞同
    3 帖子
    172 浏览
    sunrisepeakS

    @Phtato 目前默认是模块化的写法, 20之前的话 可以参考 google-style/cpp

    社区有个主要的任务的推模块化库和相关工具链使用和普及

  • 0 赞同
    3 帖子
    168 浏览
    sunrisepeakS

    最新版本该问题已经解决

    获取d2mcpp最新代码 更新d2x到最新版本 xim --update index xlings update d2x
  • 关于学习C++中的int main中new一个新的伐对象的困惑

    已锁定 已解决
    3
    0 赞同
    3 帖子
    114 浏览
    g202080272G

    @sunrisepeak 谢谢。我已经理解了

  • 1 赞同
    1 帖子
    97 浏览
    尚无回复
  • 讨论: 现代C++编码/项目风格

    1
    1 赞同
    1 帖子
    118 浏览
    尚无回复
  • 0 赞同
    7 帖子
    399 浏览
    sunrisepeakS

    @Saaqq 目前d2x工具使用c++重构了, 可以更新一下 应该不会有这个问题了

    先更新一下d2x工具

    xlings self update xim --update index xlings update d2x

    然后再到项目目录运行下面命令进入练习模式

    d2x checker

    注: 最新版本的d2x也支持配置AI大模型做智能引导, 也可以玩一玩

    33e4df78-8646-4b89-847f-41899668b251-image.png

    移植后的d2x仓库: https://github.com/d2learn/d2x 交互式教程说明: https://d2learn.github.io/d2x-project-template/chapter_0.html
  • C++学习资料开源

    1
    2 赞同
    1 帖子
    236 浏览
    尚无回复