【Trae】如何使用Trae编译C++(附带MinGW)

【Trae】如何使用Trae编译C++(附带MinGW)

结果

先看结果
这是一道回文串题目,F5编译,控制台输入输出。

在这里插入图片描述

下载

  • 下载Trae编译器,直接去官网下:https://www.trae.cn/
  • 下载VSCode编译器,这个相信用Trae的各位都不陌生。https://code.visualstudio.com/
    • 查看你的C盘,C:\Users\Administrator\.vscode\extensions路径下是否有extensions.json文件,如果没有,请将VSCode卸载后重装。

安装插件

在VSCode里安装“C/C++”插件。

在这里插入图片描述


这里需要在VSCode里安装的原因是C/C++插件在Trae里是搜不到的。
再次查看C:\Users\Administrator\.vscode\extensions路径,看看插件是否安装成功,且extensions.json文件里有这个插件。

在这里插入图片描述
在这里插入图片描述


关闭VSCode,打开Trae。
点击右上角头像-IDE设置

在这里插入图片描述


选择“从VSCode导入”,等待它导入插件,导入完成后点击查看一下,是不是下载的那些插件。

在这里插入图片描述

编译

新建一个文件夹,用Trae打开,再在里面新建一个cpp文件,输入一段HelloWorld代码。

在这里插入图片描述


会看到自动生成了一个.vscode文件夹。
在这里按F5运行,如果运行成功,会出现如下所示。

在这里插入图片描述


如果运行失败,请进行如下配置。
下载MinGW并安装到D盘(傻瓜式教学,跟着安就行,除非你知道要修改的json里每个参数的意义)
这里我贴心地给大家建了项目。
https://gitcode.com/qq_36286039111111111111111mq8/MyMinGW.git
把这个项目拉下来,MinGW放到D盘,bin文件夹的路径如下所示。

在这里插入图片描述


并且在环境变量的PATH里配置这个bin文件夹(相信各位对PATH都很熟悉)

在这里插入图片描述


接下来来到Trae,找到那个.vscode文件夹
c_cpp_properties.json

{{"configurations":[{"name":"windows-gcc-x64","includePath":["${workspaceFolder}/**"],"compilerPath":"D:/MinGW/bin/gcc.exe","cStandard":"${default}","cppStandard":"${default}","intelliSenseMode":"windows-gcc-x64","compilerArgs":[""],"browse":{"limitSymbolsToIncludedHeaders":true,"databaseFilename":"","path":["${workspaceFolder}/**","D:/mingw/include/**","D:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++","D:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/x86_64-w64-mingw32","D:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/backward","D:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include","D:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed","D:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/include"]}}],"version":4}}

launch.json

{"version":"0.2.0","configurations":[{"name":"(gdb) Launch","type":"cppdbg","request":"launch","program":"${workspaceFolder}/exe/${fileBasenameNoExtension}.exe","args":[],"stopAtEntry":false,"cwd":"${workspaceFolder}","environment":[],"externalConsole":false,"MIMode":"gdb","miDebuggerPath":"D:/MinGW/bin/gdb.exe","preLaunchTask":"g++","setupCommands":[{"description":"Enable pretty-printing for gdb","text":"-enable-pretty-printing","ignoreFailures":true}]},{"name":"C/C++ Runner: Debug Session","type":"cppdbg","request":"launch","args":[],"stopAtEntry":false,"externalConsole":true,"cwd":"i:/work/MyGit/MyCpp_Git","program":"i:/work/MyGit/MyCpp_Git/build/Debug/outDebug","MIMode":"gdb","miDebuggerPath":"gdb","setupCommands":[{"description":"Enable pretty-printing for gdb","text":"-enable-pretty-printing","ignoreFailures":true}]}]}

settings.json 这个不一定需要,但我还是放在这里

{"C_Cpp_Runner.cCompilerPath":"gcc","C_Cpp_Runner.cppCompilerPath":"g++","C_Cpp_Runner.debuggerPath":"gdb","C_Cpp_Runner.cStandard":"","C_Cpp_Runner.cppStandard":"","C_Cpp_Runner.msvcBatchPath":"","C_Cpp_Runner.useMsvc":false,"C_Cpp_Runner.warnings":["-Wall","-Wextra","-Wpedantic","-Wshadow","-Wformat=2","-Wcast-align","-Wconversion","-Wsign-conversion","-Wnull-dereference"],"C_Cpp_Runner.msvcWarnings":["/W4","/permissive-","/w14242","/w14287","/w14296","/w14311","/w14826","/w44062","/w44242","/w14905","/w14906","/w14263","/w44265","/w14928"],"C_Cpp_Runner.enableWarnings":true,"C_Cpp_Runner.warningsAsError":false,"C_Cpp_Runner.compilerArgs":[],"C_Cpp_Runner.linkerArgs":[],"C_Cpp_Runner.includePaths":[],"C_Cpp_Runner.includeSearch":["*","**/*"],"C_Cpp_Runner.excludeSearch":["**/build","**/build/**","**/.*","**/.*/**","**/.vscode","**/.vscode/**"],"C_Cpp_Runner.useAddressSanitizer":false,"C_Cpp_Runner.useUndefinedSanitizer":false,"C_Cpp_Runner.useLeakSanitizer":false,"C_Cpp_Runner.showCompilationTime":false,"C_Cpp_Runner.useLinkTimeOptimization":false,"C_Cpp_Runner.msvcSecureNoWarnings":false,"files.associations":{"cctype":"cpp","cmath":"cpp","cstdarg":"cpp","cstdint":"cpp","cstdio":"cpp","cstdlib":"cpp","type_traits":"cpp","limits":"cpp","typeinfo":"cpp","iostream":"cpp"},"terminal.integrated.suggest.enabled":true}

tasks.json 这个文件不一定需要,但我还是放在这里。
注意像我这样配置需要在项目目录下新建一个名为exe的文件夹,用于存储编译过后的文件。

{"version":"2.0.0","command":"g++","args":["-g","${file}","-o","${workspaceFolder}/exe/${fileBasenameNoExtension}.exe"],"problemMatcher":{"owner":"cpp","fileLocation":["relative","\\"],"pattern":{"regexp":"^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$","file":1,"line":2,"column":3,"severity":4,"message":5}},"tasks":[{"type":"cppbuild","label":"g++","command":"D:/MinGW/bin/g++.exe","args":["-fdiagnostics-color=always","-g","${file}","-o","${workspaceFolder}/exe/${fileBasenameNoExtension}.exe",""],"options":{"cwd":"D:/MinGW/bin"},"problemMatcher":["$gcc"],"group":{"kind":"build","isDefault":true},"detail":"调试器生成的任务。"}]}

至此再去尝试编译,一般没什么大问题 ,报什么错就去解决一下就好了。

QA

  1. 如果控制台能编译成功就是不能输入数据怎么办?
    我遇到了之后是MinGW版本问题,把原本的MinGW删了,装我在文章里给的那个。
  2. 报错找不到g++?
    PATH没配置。

Read more

C++ 运算符重载:自定义类型的运算扩展

C++ 运算符重载:自定义类型的运算扩展

C++ 运算符重载:自定义类型的运算扩展 💡 学习目标:掌握运算符重载的核心语法与规则,能够为自定义类型重载常用运算符,实现类对象的灵活运算。 💡 学习重点:运算符重载的基本形式、成员函数与全局函数重载的区别、常见运算符的重载实现、禁止重载的运算符。 一、运算符重载的概念与核心价值 ✅ 结论:运算符重载是 C++ 静态多态的重要体现,允许为自定义类型(如类、结构体)重新定义运算符的行为,让自定义对象可以像内置类型一样使用运算符。 运算符重载的核心价值: 1. 简化代码书写:用直观的运算符替代繁琐的成员函数调用,提升代码可读性 2. 统一操作风格:让自定义类型的运算逻辑与内置类型保持一致,降低学习和使用成本 3. 扩展类型功能:根据业务需求定制运算符的行为,满足自定义类型的运算需求 ⚠️ 注意事项:运算符重载不会改变运算符的优先级和结合性,也不会改变运算符的操作数个数。 二、运算符重载的基本语法 运算符重载的本质是函数重载,分为成员函数重载和全局函数重载两种形式。 2.1 成员函数重载语法 将运算符重载函数定义为类的成员函数,语法格式如下: class

By Ne0inhk
Microsoft Visual C++ Redistributable 运行库怎么安装?(详细教程)

Microsoft Visual C++ Redistributable 运行库怎么安装?(详细教程)

前言 很多人安装软件或游戏时会遇到这样的提示:“无法启动程序,计算机中丢失 MSVCP140.dll”或“VCRUNTIME140.dll 未找到”。 这类问题通常是由于系统缺少 Microsoft Visual C++ Redistributable 运行库导致的。 Microsoft Visual C++ Redistributable 是 Windows 系统中必不可少的运行组件,几乎所有基于 C++ 的程序都依赖它。若运行库缺失或版本不匹配,会导致软件无法启动。本文将从原理、安装与修复三个方面,介绍如何正确配置运行库,并推荐实用工具快速解决 DLL 缺失问题。 Microsoft Visual C++ Redistributable运行库修复工具【免费版】http://www.ijinshan.com/functions/repairdll.html?channel=1506 一、为什么电脑提示“

By Ne0inhk
【C++笔记】STL详解:list容器的实现

【C++笔记】STL详解:list容器的实现

前言:         在学习了list容器的基本使用的前提下,本文将重点分析容器类的常用接口及其应用实现。          一、list的成员变量          如图所示,list的底层数据结构为:双向链表          通过下面三个结构体和类实现list:          ①结构体 struct list_node :用来存储链表结点的信息。              ②结构体 struct list_iterator:用来封装结点指针,使其能够通过重载运算符访问结点。          ③类 class list :用来实现双向链表的各种增删查改操作          1.1 结构体list_node          template<class T> struct list_node { //对struct list_node重命名为 Node typedef list_node<T> Node; //链表存储的节点值 T _data;

By Ne0inhk
【Linux】Linux 进程通信:System V 共享内存(最快方案)C++ 封装实战 + 通信案例,4 类经典 Bug 快速修复

【Linux】Linux 进程通信:System V 共享内存(最快方案)C++ 封装实战 + 通信案例,4 类经典 Bug 快速修复

前言:欢迎各位光临本博客,这里小编带你直接手撕**,文章并不复杂,愿诸君**耐其心性,忘却杂尘,道有所长!!!! IF’Maxue:个人主页  🔥 个人专栏: 《C语言》 《C++深度学习》 《Linux》 《数据结构》 《数学建模》 ⛺️生活是默默的坚持,毅力是永久的享受。不破不立! 文章目录 * 二、System V共享内存:最快的进程间通信 * 1. System V共享内存核心概念 * 2. System V共享内存原理 * (1)进程虚拟地址空间结构 * (2)共享内存映射过程 * (3)共享内存的管理:先描述,再组织 * 3. System V共享内存核心接口 * (1)生成唯一Key:ftok * (2)创建/获取共享内存:shmget

By Ne0inhk