每次打开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 //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)<
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;
}
总结:函数模板是对函数重载的简化。