每次打开wsl,进入ubuntu中新建文件夹进行c++编程的时候经常报错,显示配置文件有问题,但是每次按照vscode官方文件配置的话是没有问题的。百思不得其解。
今晚发现了问题所在。每次新建工作区的时候会自动生成.vscode文件夹,里面是配置好的tasks和launch的json文件,所以每次使用官方文件配置的之后,那个工作区就可以正常使用了,但是如果在Ubuntu中新建文件夹的话,.vscdoe文件夹没有复制过来,或者说没有重新正确建立,所以每次都报错。
所以解决方法就是在本地windows中建立一个专门用于跑ubuntu系统的区域,配置好之后一劳永逸vscdoe配置wsl下的c++调试环境,一旦有需要就在配置好的文件夹下调试,这样的话.vscode文件都不会有问题。
附:linux下的编译命令
在使用cd 可以改变路径,比如到d盘下的project文件夹则是:cd /mnt/d/project
在路径下新建文件夹是 mkdir newfolder
编译cpp文件是g++ helloworld.cpp -o project
运行编译好的文件是 ./project
也可以不用指定文件名进行编译,如:g++ helloworld.cpp
这样生成的可执行文件直接用 ./a.out命令执行
应用场合:如果有多种不同类型的变量需要比较大小,常规写法是每种不同类型的变量都要写一个函数来比较,这样繁琐,荣誉。
函数模板解决了这个问题。
如下代码:在一个项目中,有个项目需求是能够实现多个函数用来返回两个数的最大值,要求能支持char类型、int类型、double类型变量。然后呢,根据这个需求,我们写了以下这个代码
- #include
-
- using namespace std;
-
- //比较int 类型
- int Max(int a, int b)
- {
- return a > b ? a : b;
- }
-
- //比较char 类型
- char Max(char a, char b)
- {
- return a > b ? a : b;
- }
-
- //比较float 类型
- float Max(float a, float b)
- {
- return a > b ? a : b;
- }
-
- int main(void)
- {
-
- int n = 1;
- int m = 2;
- cout << "max(1, 2) = " << Max(n, m) << endl;
-
- float a = 2.0;
- float b = 3.0;
- cout << "max(2.0, 3.0) = " << Max(a, b) << endl;
-
- char i = 'a';
- char j = 'b';
- cout << "max('a', 'b') = " << Max(i, j) << endl;
-
- return 0;
- }
同样的函数体,但是针对不同类型的参数,需要多次写这个非常相似的函数,这是非常繁琐的,而函数模型的出现就是解决这种问题。
当我们需要多个函数体一样的函数时,我们可以使用函数模板
- #include
-
- using namespace std;
-
- template <typename T> //T is any data type you want , like int or float
- T Max(T a, T b) {
- return a > b ? a : b;
- }
-
- int main(void)
- {
- int n = 2;
- int m = 3;
- cout<<"max(2,3)="<< max(n, m)<
-
- char x = 'a';
- char y = 'b';
- cout<<"max(a,b)="<< max(x, y)<
-
- float i = 3.0;
- float j = 4.0;
- cout<<"max(3.0,4.0)="<< max(i, j)<
-
- return 0;
- }
- 函数重载 function overloading
C中规定同一作用域中不能有同名函数出现,但是c++中允许在同意作用域中出现同名函数,但是这些函数的参数类型和参数个数不同。这些同名函数用来实现不同的功能,这就是函数的重载。同样不同类型的数据比较大小,函数名相同,但根据参数类型和参数个数总能匹配到相对于的函数上。
- #include
-
- using namespace std;
-
- int Max(int a, int b)
- {
- return a > b ? a : b;
- }
-
- char Max(char a, char b)
- {
- return a > b ? a : b;
- }
-
- float Max(float a, float b)
- {
- return a > b ? a : b;
- }
-
- int main(void)//main 函数中的Max函数总能根据参数的类型和个数匹配到对应的函数
- {
-
- int n = 1;
- int m = 2;
- cout << "max(1, 2) = " << Max(n, m) << endl;
-
- float a = 2.0;
- float b = 3.0;
- cout << "max(2.0, 3.0) = " << Max(a, b) << endl;
-
- char i = 'a';
- char j = 'b';
- cout << "max('a', 'b') = " << Max(i, j) << endl;
-
- return 0;
- }
总结:函数模板是对函数重载的简化。
-
相关阅读:
【C语言】解决 “address of stack memory associated with local variable ‘num‘ returned”
初识Java
初识动态内存分配
Linux(Ubuntu)下源码开发整个流程完成版本(下载->编译->模拟器运行)
ETCD集群搭建(实践可用)
MySQL篇---第四篇
首次公开!赛迪顾问《湖仓一体技术研究报告》深入解读
简单好用的文档管理系统MinDoc
三元组(C++ 实现矩阵快速转置)
websocket 和 eventsource 的区别和应用
-
原文地址:https://blog.csdn.net/qq_39333636/article/details/134279948