连接时出错

sj307639429 2009-06-04 01:44:59
我写了8个源文件,每个文件定义一个函数,函数声明都放在一个头文件head。h中,head如下,
#define N 10
#define M 20
extern void input();
extern void store();
extern void load();
extern void print();
extern int statone();
extern int *stat();
extern void dele();
extern char str[N][M];

其中str[N][M]为整个程序要用到的数据结构
连接时,报错如下:
stat.obj : error LNK2001: unresolved external symbol "char (* str)[20]" (?str@@3PAY0BE@DA)
statone.obj : error LNK2001: unresolved external symbol "char (* str)[20]" (?str@@3PAY0BE@DA)
dele.obj : error LNK2001: unresolved external symbol "char (* str)[20]" (?str@@3PAY0BE@DA)
input.obj : error LNK2001: unresolved external symbol "char (* str)[20]" (?str@@3PAY0BE@DA)
print.obj : error LNK2001: unresolved external symbol "char (* str)[20]" (?str@@3PAY0BE@DA)
print.obj : error LNK2001: unresolved external symbol "char (* str)[20]" (?str@@3PAY0BE@DA)
store.obj : error LNK2001: unresolved external symbol "char (* str)[20]" (?str@@3PAY0BE@DA)
load.obj : error LNK2001: unresolved external symbol "char (* str)[20]" (?str@@3PAY0BE@DA)
Debug/文章编辑.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
...全文
105 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
rocklad 2009-06-04
  • 打赏
  • 举报
回复
stat.obj : error LNK2001: unresolved external symbol "char (* str)[20]" (?str@@3PAY0BE@DA)
statone.obj : error LNK2001: unresolved external symbol "char (* str)[20]" (?str@@3PAY0BE@DA)
dele.obj : error LNK2001: unresolved external symbol "char (* str)[20]" (?str@@3PAY0BE@DA)
input.obj : error LNK2001: unresolved external symbol "char (* str)[20]" (?str@@3PAY0BE@DA)
print.obj : error LNK2001: unresolved external symbol "char (* str)[20]" (?str@@3PAY0BE@DA)
print.obj : error LNK2001: unresolved external symbol "char (* str)[20]" (?str@@3PAY0BE@DA)
store.obj : error LNK2001: unresolved external symbol "char (* str)[20]" (?str@@3PAY0BE@DA)
load.obj : error LNK2001: unresolved external symbol "char (* str)[20]" (?str@@3PAY0BE@DA)
符号未定义错误。只是声明变量,但是编译器并未给变量分配内存。所以不能使用该变量。


我在main()中定义“char str[N][M]”
然后在各文件中声明:extern str[N][M];
build 后报错:
stat.obj : error LNK2001: unresolved external symbol "int (* str)[20]" (?str@@3PAY0BE@HA)
statone.obj : error LNK2001: unresolved external symbol "int (* str)[20]" (?str@@3PAY0BE@HA)
store.obj : error LNK2001: unresolved external symbol "int (* str)[20]" (?str@@3PAY0BE@HA)
dele.obj : error LNK2001: unresolved external symbol "int (* str)[20]" (?str@@3PAY0BE@HA)
input.obj : error LNK2001: unresolved external symbol "int (* str)[20]" (?str@@3PAY0BE@HA)
load.obj : error LNK2001: unresolved external symbol "int (* str)[20]" (?str@@3PAY0BE@HA)
print.obj : error LNK2001: unresolved external symbol "int (* str)[20]" (?str@@3PAY0BE@HA)
Debug/文章编辑.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
是重复定义了全局变量。


解决办法:
在head.h声明为 extern char str[N][M];
在任何一处定义 char str[N][M];
这样该变量就是在你的工程里的源文件都可以使用。最好用volatile休息变量。



nosxcy 2009-06-04
  • 打赏
  • 举报
回复
你的头文件是head。h还是head.h?????????
goodname 2009-06-04
  • 打赏
  • 举报
回复
extern char str[N][M];

gets((str[i]);//掉括号了吧?
tlx20093A 2009-06-04
  • 打赏
  • 举报
回复
让我开了眼界。。加速度学习呀。。。。
sj307639429 2009-06-04
  • 打赏
  • 举报
回复
我在main()中定义“char str[N][M]”
然后在各文件中声明:extern str[N][M];
build 后报错:
stat.obj : error LNK2001: unresolved external symbol "int (* str)[20]" (?str@@3PAY0BE@HA)
statone.obj : error LNK2001: unresolved external symbol "int (* str)[20]" (?str@@3PAY0BE@HA)
store.obj : error LNK2001: unresolved external symbol "int (* str)[20]" (?str@@3PAY0BE@HA)
dele.obj : error LNK2001: unresolved external symbol "int (* str)[20]" (?str@@3PAY0BE@HA)
input.obj : error LNK2001: unresolved external symbol "int (* str)[20]" (?str@@3PAY0BE@HA)
load.obj : error LNK2001: unresolved external symbol "int (* str)[20]" (?str@@3PAY0BE@HA)
print.obj : error LNK2001: unresolved external symbol "int (* str)[20]" (?str@@3PAY0BE@HA)
Debug/文章编辑.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.


这里char怎么变成 int了,而且在input里有句初始化str的语句:gets((str[i]);这里会报错
F:\文章编辑\input.cpp(10) : error C2664: 'gets' : cannot convert parameter 1 from 'int [20]' to 'char *'

这是什么原因啊
gykgod 2009-06-04
  • 打赏
  • 举报
回复
you are a bangchui!

把extern 去掉变成全局变量
  • 打赏
  • 举报
回复
在头文件里声明,在需要调用的地方extern。
blh 2009-06-04
  • 打赏
  • 举报
回复
extern char str[N][M]; 在那里定义的?这里只是一个申明
goodname 2009-06-04
  • 打赏
  • 举报
回复
头文件写声明后,包含这个头文件的都可以根据你声明的方式来使用这个变量。
但是你应该有一份定义。

c/c++中都强调只有一处定义,但是可以多次声明。
sj307639429 2009-06-04
  • 打赏
  • 举报
回复
对对,书上是这么用的,但没讲问什么这么用
陽洸膂珵 2009-06-04
  • 打赏
  • 举报
回复
友情顶下!
lingyin55 2009-06-04
  • 打赏
  • 举报
回复
在你使用char str[N][M]; 这个的源文件中定义。
yyyapple 2009-06-04
  • 打赏
  • 举报
回复
extern char str[N][M]; // 只是声明

// 你需要在一个源文件中定义它

char str[N][M]={0,};
goodname 2009-06-04
  • 打赏
  • 举报
回复
你应该在你的某个源文件中定义它

char str[N][M];
sj307639429 2009-06-04
  • 打赏
  • 举报
回复
以上是用c语言写的,编译器是vc++6.0
PowerBI系列之Power Query专题1.  获取数据 数据源种类介绍和获取Excel数据源输入数据和拷贝数据:创建辅助表解析Json/XML数据格式获取Web网页数据和URL添加动态参数连接数据的四种模式:Import、DirectQuery、Live Connection、Dual双 属于混合模式连接数据库:Sql server、 Mysql(直连但是必须先安装一个mysql插件)DirectQuery直连查询:Sql serverODBC方式获取数据表关联或多个Sql或调用存储过程获取数据SQL中动态传参和自定义函数: sql中使用参数或数据库名称使用参数连接Sharepoint和OneDrive数据源连接Dataset和Dataflow 替换本地数据源为Sharepoint数据源并保留数据处理操作 终止当前数据刷新Loading:Cancel Query数据源设置-重置数据连接凭证PBIDS连接数据源创建和使用报表模块(输入或值列表)利用报表模板和参数控制线下报表数据权限DirectQuery启用自动页面刷新和更改检测管理聚合表提高DirectQuery查询性能动态M查询参数提高DirectQuery查询性能添加数据刷新间 DateTime.LocalNow()和Getdate()2.  数据清洗和M语言M语言和官方文档介绍PowerQuery中查阅M函数:=#shared, Ctrl+Space提示数据清洗之常用技能:提升标题、更改数据类型、保留删除错误或空行,删除重复项、选择列和删除列、填充单元格、合并列、拆分、提取、替换、条件替换、添加自定义列,添加条件列、添加索引列、分组、添加年月日列、追加和合并查询透视和逆透视以及转置合并单元格的Excel文件处理导入文件夹中多Excel文件并合并解决多文件合并中列顺序不一致使用参数和函数批量导入文件 文本中提取中文、英文、数字等处理双引号转义 列拆分详解解决列名改变错误解决列丢失错误动态显示、排序和重命名列为所有列名添加前缀列名字母大写和分隔符调整Trim标题列中的多余空格如何处理load数据错误为什么load的Excel数据有null空行为什么load的Excel数据标题在第二行灵活添加占位符规范同类相似数据数据按多列排序为分组添加Index序号分组内值合并诊断工具分析数据处理过程PowerQuery小技巧分享 新冠病例活动轨迹地图标识 

69,382

社区成员

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

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