vscode快捷键编译运行c++project(windows10)

简介: vscode快捷键编译运行c++project(windows10)


一 问题描述


在环境配置没有问题的前提下创建了c++project,主程序不包含其他目录下的程序情况下使用快捷键编译可以正常编译成功并生成可执行文件,但是包含了其他目录下的文件以后就会报错。该文章就是为了解决这种包含了其他目录文件情况下无法使用快捷键编译的问题。


二 前提,安装MinGw环境:


https://code.visualstudio.com/docs/cpp/config-mingw


三 问题复现


在桌面建立一个project文件,文件夹组成如下:

1 新建工作空间文件夹:workspace;

2 进入workspace文件夹新建src;

3 进入src,新建project;

4 进入project后再新建一个hiworld文件夹。

使用vscode打开该文件夹:如图

image.png

workspace目录树

5 在各个目录新建测试文件:

image.png

测试程序文件分布

mian.cpp

#include "hiworld/hi.h"
int main(int argc, const char** argv) {
    std::cout<<"hdsjhdk"<<std::endl;
    HI hh;
    return 0;
}

hi.h

#pragma once
#include<iostream>
class HI
{
private:
    /* data */
public:
 HI(/* args */);
 ~HI() = default;
};

hi.cpp

#include "hi.h"
HI::HI(){
    std::cout<<"this is a hi class !"<<std::endl;
}

6 至此会出现的错误(非本文关注重点)

按照上述操作建立完成程序文件以后会提示无法找到c++一些的函数(头文件出现红色波浪线)。

image.png

报错提示

这问题是因为没有为程序配置c++编译环境,解决方法如下:

  • ctrl+shift+p,选择select intellisence configuration;

image.png

ctrl+shift+p后出现的

  • 然后选择g++对应的编译环境;

image.png

选择use g++.exe

  • 按照上述操作以后程序中包含的库函数就不会再出现红色波浪线的错误

image.png

配置好后会出现的文件夹和jason文件

7 使用快捷键编译程序(会出错)

点击main.cpp 在main.cpp文件下开始编译程序。

image.png

在上图状态下选择最右侧的运行键选择第三个配置g++编译器

image.png

选择g++编译器进行编译

image.png

错误出现

image.png

函数未定义

按照上述的操作就会出现函数未定义的情况,但是这些函数我们在编码过程中都进行了实现。上述流程是建立一个c++project会有的。但是在vscode中如果使用快捷键编译就一定会报错。


四 解决方法

  • 错误原因:快捷键进行编译时会默认生成一个tasks.json文件,但该文件中的编译命令只包含了main.cpp,没有包含其他文件下需要的.cpp文件,所以才会出现函数未定义的情况。
  • 解决办法:找到需要包含的cpp文件,并复制它的路径,加入tasks.json中。

image.png

路径复制

image.png

路径粘贴

按照上述操作把路径添加到tasks.json中对应的地方并保存,而且粘贴的路径中用的是“\\”。

  • 编译运行:再次尝试编译运行程序,可以看到正常的打印出了main中的信息以及其他文件中实现时输出的打印信息.

image.png

最终结果

五 总结

一句话:出现上述快捷键编译无法通过且提示undefined reference ***的情况,把对应cpp文件的路径复制后粘贴到tasks.json下的"${file}"与“-o”之间就可以了。

相关文章
|
存储 缓存 文件存储
如何保证分布式文件系统的数据一致性
分布式文件系统需要向上层应用提供透明的客户端缓存,从而缓解网络延时现象,更好地支持客户端性能水平扩展,同时也降低对文件服务器的访问压力。当考虑客户端缓存的时候,由于在客户端上引入了多个本地数据副本(Replica),就相应地需要提供客户端对数据访问的全局数据一致性。
33250 201
如何保证分布式文件系统的数据一致性
|
设计模式 存储 监控
设计模式(C++版)
看懂UML类图和时序图30分钟学会UML类图设计原则单一职责原则定义:单一职责原则,所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。bad case:IPhone类承担了协议管理(Dial、HangUp)、数据传送(Chat)。good case:里式替换原则定义:里氏代换原则(Liskov 
36820 22
设计模式(C++版)
|
存储 编译器 C语言
抽丝剥茧C语言(初阶 下)(下)
抽丝剥茧C语言(初阶 下)
|
机器学习/深度学习 人工智能 自然语言处理
带你简单了解Chatgpt背后的秘密:大语言模型所需要条件(数据算法算力)以及其当前阶段的缺点局限性
带你简单了解Chatgpt背后的秘密:大语言模型所需要条件(数据算法算力)以及其当前阶段的缺点局限性
24905 16
|
机器学习/深度学习 弹性计算 监控
重生之---我测阿里云U1实例(通用算力型)
阿里云产品全线降价的一力作,2023年4月阿里云推出新款通用算力型ECS云服务器Universal实例,该款服务器的真实表现如何?让我先测为敬!
36824 15
重生之---我测阿里云U1实例(通用算力型)
|
SQL 存储 弹性计算
Redis性能高30%,阿里云倚天ECS性能摸底和迁移实践
Redis在倚天ECS环境下与同规格的基于 x86 的 ECS 实例相比,Redis 部署在基于 Yitian 710 的 ECS 上可获得高达 30% 的吞吐量优势。成本方面基于倚天710的G8y实例售价比G7实例低23%,总性价比提高50%;按照相同算法,相对G8a,性价比为1.4倍左右。
|
存储 算法 Java
【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的限流器RateLimiter功能服务
随着互联网的快速发展,越来越多的应用程序需要处理大量的请求。如果没有限制,这些请求可能会导致应用程序崩溃或变得不可用。因此,限流器是一种非常重要的技术,可以帮助应用程序控制请求的数量和速率,以保持稳定和可靠的运行。
29948 52

热门文章

最新文章