无法启动xxx.exe 。 系统找不到指定的文件

小湿哥 2011-08-28 05:12:52
几个源文件编译都能成功了,然后运行,显示 无法启动xxx.exe,系统找不到制定文件,我再去project\xxx\debug\看,xxx.exe文件已经没有了。

然后我尝试重新生成解决方案,结果出现error,如下所示:


1>import.obj : error LNK2005: "struct Column * bighead" (?bighead@@3PAUColumn@@A) 已经在 creat.obj 中定义
1>main.obj : error LNK2005: "struct Column * bighead" (?bighead@@3PAUColumn@@A) 已经在 creat.obj 中定义

看样子应该是与我设定的全局变量 bighead有关,现我把有bighead出现的code都贴出来,看有木有大侠能找出其中的问题。
首先是全局变量声明所在的.h 文件:

struct Column
{
int datatype; // 用以标示数据类型
int datalength; // 标示数据的长度
char name[128]; // or char *name;
struct Column *nextColumn;
struct data *firstData;
};
struct data
{
char *record;
struct data *nextdata;
};

void quit();
void import();
int main();
void print();
struct Column *bighead;//这里就是那个全局变量。
struct Column *creat();


然后是引用它的,main.cpp文件

#include<stdio.h>
#include<windows.h>
#include"struct.h"

int main()
{
int i;
char c;
printf(" ");
for(i=0;i<42;i++)
printf("*");
printf("\n");
printf(" * Tiny In-Mem DataBase version 6.72f *\n");
printf(" * Copyright X X ALL Rights Reserved *\n");
printf(" ");
for(i=0;i<42;i++)
printf("*");
printf("\nDB1=>");
while(1)
{scanf("%c",&c);
if(c=='-')
{scanf("%c",&c);
switch(c)
{
case'c':bighead=creat();break;//这一引用了全局变量。
case'i':import();break;
case's':break;
case'u':break;
case'd':break;
case'q':quit();return(0);
default :break;
}
}
else printf("Unavilable command!\n");
}
return(0);
}


还有一个地方,是我正在写的impor.cpp文件里的。

#include<stdio.h>
#include<string.h>
#include <stdlib.h>
#include"struct.h"

void import()
{
FILE *fp;
char addr[20],ch,h[10];
scanf("%s",&addr);
fp=fopen(addr,"rt+");
ch=fgetc(fp);
struct data *p1,*p2,*p3,*p4,*p5,*p6;
struct Column *head;
p1=(struct data *)malloc(sizeof(struct data));
p3=(struct data *)malloc(sizeof(struct data));
p5=(struct data *)malloc(sizeof(struct data));
head=bighead;//.........................................就这里了。。
head->firstData = p1;
head=head->nextColumn;
head->firstData = p3;
head=head->nextColumn;
head->firstData = p5;
memset(h, 0, sizeof(h));
int i=0;
while(ch!=',')
{
h[i]=ch;
ch=fgetc(fp);
i++;
}
p1->record=h;

}


求助 求助
...全文
748 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangxiaofei616 2012-05-03
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

魂之挽歌
[/Quote]
我也遇到这个问题了,LZ你解决没有啊
请指教啊
baitoclus 2011-08-30
  • 打赏
  • 举报
回复
头文件被重复包含吧
#idndef _xx_H
#define _xx_H

#endif
要加个
quwei197874 2011-08-30
  • 打赏
  • 举报
回复
少个库
小湿哥 2011-08-30
  • 打赏
  • 举报
回复
魂之挽歌
小湿哥 2011-08-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 pathuang68 的回复:]
引用 1 楼 maoxing63570 的回复:

不要在头文件中定义变量,你在.cpp中定义,然后在头文件中extern


++

另外,把项目Clean一下,或者吧debug目录下的所有文件全部删掉,然后重新编译一次试试。
[/Quote]

clean是什么意思?怎么clean啊。。
小湿哥 2011-08-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 cmarquis 的回复:]
struct Column
{
int datatype; // 用以标示数据类型
int datalength; // 标示数据的长度
char name[128]; // or char *name;
struct Column *nextColumn;
struct data *firstData;
};
1. 这个结构的定义要放的.h文件,"exter……
[/Quote]

我的.h文件就是这样的

struct Column
{
int datatype; // 用以标示数据类型
int datalength; // 标示数据的长度
char name[128]; // or char *name;
struct Column *nextColumn;
struct data *firstData;
};
extern struct Column *bighead;
struct Column *creat();
struct data
{
char *record;
struct data *nextdata;
};

void quit();
void import();
int main();
void print();


另外声明的creat.cpp:

#include<stdio.h>
#include<string.h>
#include <stdlib.h>
#include"struct.h"

struct Column *creat()
{
struct Column *head,*p1,*p2;
struct Column *bighead;//这里声明。。。。。。。。。。。。。。。。。
p1=p2=(struct Column *)malloc(sizeof(struct Column));
printf("you are right\n");
int n=0;
FILE *fp;
char addr[20],ch,h[10];
scanf("%s",&addr);
fp=fopen(addr,"rt+");
ch=fgetc(fp);
while(ch!='(')
{
printf("%c",ch);
ch=fgetc(fp);
}
ch=fgetc(fp);
ch=fgetc(fp);
printf("%c\n",ch);
int i=0;
memset(p1->name, 0, sizeof(p1->name));//字符串数组清零
while(ch!=' ')
{
p1->name[i]=ch;
ch=fgetc(fp);
i++;
}
printf("%s\n",p1->name);
ch=fgetc(fp);
if(ch=='f')p1->datatype=1;
else p1->datatype=0;
while(ch!='(')
{
ch=fgetc(fp);
}
i=0;
memset(h, 0, sizeof(h));
ch=fgetc(fp);
while(ch!=')')
{
h[i]=ch;
i++;
ch=fgetc(fp);
}
ch=fgetc(fp);
p1->datalength=atoi(h);
p1->firstData=NULL;
while(ch!=')')
{
n=n+1;
if(n==1)head=p1;
else p2->nextColumn=p1;
p2=p1;
p1=(struct Column *)malloc(sizeof(struct Column));
while(ch!=10)//进入下一行读取
{
ch=fgetc(fp);
}
ch=fgetc(fp);
if(ch==')')break;
memset(p1->name, 0, sizeof(p1->name));//输入名
i=0;
while(ch!=' ')
{
p1->name[i]=ch;
ch=fgetc(fp);
i++;
}
ch=fgetc(fp);
if(ch=='f')p1->datatype=1;//输入类型
else p1->datatype=0;
while(ch!='(')
{
ch=fgetc(fp);
}
i=0;
memset(h, 0, sizeof(h));//输入长度
ch=fgetc(fp);
while(ch!=')')
{
h[i]=ch;
i++;
ch=fgetc(fp);
}
p1->datalength=atoi(h);
p1->firstData=NULL;
ch=fgetc(fp);
}
p2->nextColumn=NULL;
struct Column *p;
printf("\nprint result is\n");
p=head;
if(head!=NULL)
while(p!=NULL)
{
printf("%d %d %5s\n",p->datatype,p->datalength,p->name);
p=p->nextColumn;
}
return(head);
}


有两个Debug的文件夹内容都删掉,重新编译,依旧不能生成exe文件。。
pathuang68 2011-08-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 maoxing63570 的回复:]

不要在头文件中定义变量,你在.cpp中定义,然后在头文件中extern
[/Quote]

++

另外,把项目Clean一下,或者吧debug目录下的所有文件全部删掉,然后重新编译一次试试。
热爱生活 2011-08-28
  • 打赏
  • 举报
回复
帮顶。。。
CJacky++ 2011-08-28
  • 打赏
  • 举报
回复
struct Column
{
int datatype; // 用以标示数据类型
int datalength; // 标示数据的长度
char name[128]; // or char *name;
struct Column *nextColumn;
struct data *firstData;
};
1. 这个结构的定义要放的.h文件,"extern struct Column *bighead;"之前
2. 所有使用到bighead的.cpp文件都要#include这个头文件


zw1270644192 2011-08-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jackyjkchen 的回复:]
引用 1 楼 maoxing63570 的回复:

不要在头文件中定义变量,你在.cpp中定义,然后在头文件中extern

就是这样
[/Quote]
++
jackyjkchen 2011-08-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 maoxing63570 的回复:]

不要在头文件中定义变量,你在.cpp中定义,然后在头文件中extern
[/Quote]
就是这样
maoxing63570 2011-08-28
  • 打赏
  • 举报
回复
不是吧,clean,重编绎下看
小湿哥 2011-08-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 maoxing63570 的回复:]
不要在头文件中定义变量,你在.cpp中定义,然后在头文件中extern
[/Quote]

OK。我在creat.cpp中声明 struct Column *bighead,
然后再到 .h文件中,声明 extern struct Column *bighead;

结果就变成这样了:
1>import.obj : error LNK2001: 无法解析的外部符号 "struct Column * bighead" (?bighead@@3PAUColumn@@A)
1>main.obj : error LNK2001: 无法解析的外部符号 "struct Column * bighead" (?bighead@@3PAUColumn@@A)

何解啊 何解
羽飞 2011-08-28
  • 打赏
  • 举报
回复
把工程下的opt,clw,ncb删掉重新编译试一下,有时候管用,但是我不知道为什么
maoxing63570 2011-08-28
  • 打赏
  • 举报
回复
不要在头文件中定义变量,你在.cpp中定义,然后在头文件中extern

69,377

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧