有效解决VC++6.0一个工程不能有多个main函数的解决方案

一.现象及原因

现象:在一个工程中有2个带有main函数的文件:InsertSort.cpp,ShellSort.cpp

InsertSort.cpp

 1 #include <stdio.h>
 2
 3 void InsertSort(int A[],int n)
 4 {
 5     int i,j;
 6     for(i=2;i<=n;i++)
 7     {
 8        if(A[i]<A[i-1])
 9        {
10          A[0]=A[i];
11          for(j=i-1;A[0]<A[j];--j)
12          {
13             A[j+1]=A[j];
14
15          }
16
17          A[j+1]=A[0];
18        }
19     }
20 }
21
22 void InsertSort_1(int A[],int n)
23 {
24     int i,j,temp;
25     for(i=1;i<n;i++)
26     {
27        if(A[i]<A[i-1])
28        {
29          temp=A[i];
30          for(j=i-1;A[j]>temp;j--)
31          {
32             A[j+1]=A[j];
33
34          }
35
36          A[j+1]=temp;
37        }
38     }
39 }
40
41 int main()
42 {
43     int i,a[10]={5,2,6,0,3,9,1,7,4,8};
44     InsertSort(a,10);
45     printf("InsertSort排序后的结果是:");
46     for(i=0;i<10;i++)
47     {
48        printf("%d",a[i]);
49     }
50     printf("\n\n");
51     return 0;
52 }

ShellSort.cpp

 1 #include <stdio.h>
 2 void shellSort(int A[],int n)
 3 {
 4     int dk;
 5     int i,j;
 6     int temp;
 7     for(dk=n/2; dk>=1;dk/=2) //用来控制步长,最后递减到1
 8     {
 9         for(i=dk+1;i<=n;i++)
10         {
11             if(A[i]<A[i-dk])
12             {
13                 A[0]=A[i];
14                 for(j=i-dk;j>0&&A[0]<A[j];j-=dk)
15                     A[j+dk]=A[j];
16                 A[j+dk]=A[0];
17
18             }
19         }
20     }
21 }
22 int shellSort_main()
23 {
24     int i,a[10]={0,5,2,6,3,9,1,7,4,8};
25     shellSort(a,10);
26     printf("ShellSort排序后的结果是:");
27     for(i=0;i<10;i++)
28     {
29        printf("%d",a[i]);
30     }
31     printf("\n\n");
32     return 0;
33 }

当运行过第一个文件后,再编写并运行第二个文件时,会抛出异常。

抛出异常:shellsort.obj : error LNK2005: _main already defined in insertsort.obj
                  Debug/chapter2.exe : fatal error LNK1169: one or more multiply defined symbols found

原因:main函数重定义。注意,程序是按照一个工程为单位进行编译,每个工程只能有且只有一个main函数,也就是只有一个函数入口。

那么我又想偷懒,不想再重新建立一个工程。否则每建立一个算法程序打开新的一个工程,这样做是不会死太麻烦了。那么我们可以怎样来解决呢?

二.解决办法

【方法一】:最笨的方法,既然说是只能允许一个main()主函数入口,那么我在之前那一个里面用/*......*/注释掉不就可以了吗?不错,这样倒是一个解决方案。

【方法二】:从操作看来,方法一这样太麻烦了,假如有几十个文件或者更多,每次都是这样干,也太费事,浪费光阴和青春了吧?那么我们该怎么做呢?

(1)在编好第2个新程序之后,在工程左边fileview里工程下的source files中,选中前一个带main函数的文件,点键盘的【Delete】键,删除该文件(其实只是从工程中移除出去,  并 没有删除,您可以打开该工程目录查看,它依然存在,只是不在VC6.0中显示了,表示已经不在该工程编译范围之内)。

(2) 然后,执行VC6.0菜单命令“组建”→“清除”,

(3)再按F7或者编译快捷键,重新编译新建的C++程序。

这样,每个cpp文件(包括已移除的前main()文件)都留在当前工程所在目录中,而每次只有一个带main函数的cpp文件存在于工程当中执行。

【如果想恢复到原来的那个文件】:在工程左边fileview里工程下的source files中单击【右键】→选择【添加文件到当前目录】→选择需要导入到文件cpp,打开确认就可以把删除的文件导入进来。

【方法三】:将main函数单独写在一个文件里,并通过头文件将其他文件中的函数引入进来

如:(1)将InsertSort.cpp中的main函数重命名为普通字母

(2)再编写InsertSort.h来声明InsertSort.cpp中的函数

(3)新建一个带main函数的文件main.cpp,在main.cpp中引入头文件,调用InsertSort.cpp中的方法

修改后的源码如下:

InsertSort.cpp

 1 #include <stdio.h>
 2
 3 void InsertSort(int A[],int n)
 4 {
 5     int i,j;
 6     for(i=2;i<=n;i++)
 7     {
 8        if(A[i]<A[i-1])
 9        {
10          A[0]=A[i];
11          for(j=i-1;A[0]<A[j];--j)
12          {
13             A[j+1]=A[j];
14
15          }
16
17          A[j+1]=A[0];
18        }
19     }
20 }
21
22 void InsertSort_1(int A[],int n)
23 {
24     int i,j,temp;
25     for(i=1;i<n;i++)
26     {
27        if(A[i]<A[i-1])
28        {
29          temp=A[i];
30          for(j=i-1;A[j]>temp;j--)
31          {
32             A[j+1]=A[j];
33
34          }
35
36          A[j+1]=temp;
37        }
38     }
39 }
40
41 int InsertSort_main()
42 {
43     int i,a[10]={5,2,6,0,3,9,1,7,4,8};
44     InsertSort(a,10);
45     printf("InsertSort排序后的结果是:");
46     for(i=0;i<10;i++)
47     {
48        printf("%d",a[i]);
49     }
50     printf("\n\n");
51     return 0;
52 }

InsertSort.h

void InsertSort(int A[],int n);
int InsertSort_main();

main.cpp

1 #include <stdio.h>
2 #include "InsertSort.h"
3 void main()
4 {
5 InsertSort_main();
6 //ShellSort_main();
7 }

(1)

时间: 2024-12-19 21:19:51

有效解决VC++6.0一个工程不能有多个main函数的解决方案的相关文章

解决VC++6.0 无法打开、无法添加工程文件

在windows系统下,经常会遇到这样的问题:点击VC++6.0 的[文件]下的[打开]无法操作,并且无法向工程添加文件,下面详细介绍一下解决方案? 工具/原料 VC++6.0 修复工具:FileTool.exe 方法/步骤 1 下载FileTool.压缩包后,解压得到FileTool.exe,双击FileTool.exe文件再次解压,指定解压路径E:\filetool\,解压后到目录E:\filetool\下有个文件:FileTool.dsw文件. 2 打开VC++6.0,点击[文件],[打开

解决Win7下VC++6.0不能直接打开多个工程的问题

在Win7操作系统下,直接双击打开多个VC ++6.0的工程文件时,后打开的工作区会将前一个工作区关掉,这样,VC++6.0只能通过文件-->打开工作区-->找到磁盘中的工程文件,才能打开多个工作区.在xp下,我们可以设置文件打开的默认方式中去掉DDE选项,这样可以使得VC6可以直接打开多个工程,但在win7下,却没有办法找到这个设置窗口.不过,经实践,可以用以下办法解决: 打开cmd: 1)输入assoc .dsp回车,确认后缀为.dsp的文件类型为dspfile: 2)输入assoc .d

VC++6.0 无法打开、无法添加工程文件完美解决

在windows系统下,经常会遇到这样的问题:点击VC++6.0 的[文件]下的[打开]无法操作,并且无法向工程添加文件,下面详细介绍一下解决方案? 工具/原料 VC++6.0 修复工具:FileTool.exe 方法/步骤 1 下载FileTool.压缩包后,解压得到FileTool.exe,双击FileTool.exe文件再次解压,指定解压路径E:\filetool\,解压后到目录E:\filetool\下有个文件:FileTool.dsw文件. 2 打开VC++6.0,点击[文件],[打开

解决Win7下一个VC++6.0您不能直接打开多个project问题

于Win7操作系统,只需双击打开多个VC ++6.0的project当文件,前方和后方的工作区将关闭工作区,这项.VC++6.0仅仅通过文件-->开放式工作区-->找到磁盘project档,才干打开多个工作区.在xp下,我们能够设置文件打开的默认方式中去掉DDE选项.这样能够使得VC6能够直接打开多个project.但在win7下,却没有办法找到这个设置窗体.只是,经实践.能够用下面办法解决: 打开cmd: 1)输入assoc .dsp回车,确认后缀为.dsp的文件类型为dspfile. 2)

VC++6.0在Win7以上系统上Open或Add to Project files崩溃问题 解决新办法

转载请注明出处~~ 崩溃原因是和office高版本冲突,比如我64位win7装了64位office2013及visio就遇到了这个问题(我很纳闷,记得重装系统前装的是32位office2013及visio就未曾遇到该问题). 目前网上流传的解决方法是微软提供的Filetool.exe办法,详情请见http://blog.csdn.net/he_qiao/article/details/8245693 以上办法很麻烦也不好用, 今天用google搜索在微软社区中看到一个人的办法很好用,成功解决了该

VC++6.0打开文件出错的解决办法

1.下载http://support.microsoft.com/kb/241396里面的一个叫FileTool.exe的文件并解压,解压后是一个vc工程,用vc6.0打开工程,编译,得到FileTool.dll,把它拷到vc6.0安装目录下. 2.点vc菜单栏里面的Tools(工具)->Customizes(定制)->Add-ins and Macro Files(附加项和宏文件) 点 Browse(浏览),选择类型为*.dll, 找到刚刚那个FileTool.dll文件,点确定,vc界面上

解决Win7下VC++6.0与Office不兼容的问题

在Windows7下安装Visual C++ 6.0后,如果同时安装了Microsoft Office就会出现打开文件的时候出现异常,而导致VC6崩溃. 微软已经为我们解决了问题,开发出一个插件(FileTool.dll)来帮我们解决这个问题.http://support.microsoft.com/kb/241396/en-us#appliesto 具体方法: 1.下载FileTool.exe,并解压.下载地址http://support.microsoft.com/kb/241396/en-

VC6-Win7下VC++6.0打开多个工程的设置

在Win7操作系统下,如果是以Administrator登陆,则VC6.0打开工程文件的时候,不能同时打开多个工程文件,后打开的工程会将前一个工程close掉,这样,VC6.0只能出现一个进程.在xp下,我们可以设置文件打开的默认方式中去掉DDE选项,这样可以使得VC6可以同时打开多个工程,但在win7下,却没有办法找到这个设置窗口.经过实践,可以用以下办法解决:打开cmd:1)输入assoc .dsp回车,确认后缀为.dsp的文件类型为dspfile:2)输入assoc .dsw回车,确认后缀

Win7下VC++6.0打开文件报错导致其崩溃的解决办法

原文:http://blog.csdn.net/wanghaihao_1/article/details/39005771 在Windows7下安装Visual C++ 6.0后,遇到一个致命的问题打开文件的时候出现异常而导致VC6崩溃. 如下图所示: 微软针对这个问题发布了一个补丁,原补丁是未编译的VC++6工程(FileTool),大家可以手动在VC++6.0环境下编译一下. 为了方便使用,我在这里还提供了一个已编译的版本FileTool.dll_已编译.zip 这里提供下载:FileToo