比如我定义一个“sort.cpp”,里面有三个函数,那这三个函数可以有相同的指针变量吗?如果在“output.cpp”里面也有三个函数,那这三个函数可以与“sort.cpp”里的三个函数有相同的指针变量吗?
我的程序执行时出现这样的错误:
--------------------Configuration: mygaokaoxitong - Win32 Debug--------------------
Compiling...
input.cpp
main.cpp
modify.cpp
output.cpp
print_str.cpp
sort.cpp
Linking...
delete.obj : error LNK2005: "int * Code" (?Code@@3PAHA) already defined in analyze.obj
input.obj : error LNK2005: "int * Code" (?Code@@3PAHA) already defined in analyze.obj
judge.obj : error LNK2005: "int * Code" (?Code@@3PAHA) already defined in analyze.obj
main.obj : error LNK2005: "int * Code" (?Code@@3PAHA) already defined in analyze.obj
modify.obj : error LNK2005: "int * Code" (?Code@@3PAHA) already defined in analyze.obj
output.obj : error LNK2005: "int * Code" (?Code@@3PAHA) already defined in analyze.obj
print_str.obj : error LNK2005: "int * Code" (?Code@@3PAHA) already defined in analyze.obj
release.obj : error LNK2005: "int * Code" (?Code@@3PAHA) already defined in analyze.obj
reserve.obj : error LNK2005: "int * Code" (?Code@@3PAHA) already defined in analyze.obj
sort.obj : error LNK2005: "int * Code" (?Code@@3PAHA) already defined in analyze.obj
Debug/mygaokaoxitong.exe : fatal error LNK1169: one or more multiply defined symbols found
执行 link.exe 时出错.
mygaokaoxitong.exe - 1 error(s), 0 warning(s)
多文件中的不同函数可以定义相同的指针变量吗?
答案:2 悬赏:0 手机版
解决时间 2021-01-31 09:11
- 提问者网友:半生酒醒
- 2021-01-31 06:21
最佳答案
- 五星知识达人网友:掌灯师
- 2021-01-31 07:14
链接器允许有类型和名称相同的对象,但要在不同的作用域中,否则会违反唯一定义原则,无法分辨具体应该用哪个对象进行链接。
因此,不能是全局对象。局部对象的定义域是明确的,在不同的函数中可以有不同的同名同类型局部对象(包括参数)。
解决方法
1.在一个编译单元(例如.cpp文件)中定义全局对象,在另外的编译单元中用extern声明(而不是定义)这个对象,以保持唯一性。
2.每个编译单元都定义对象,前面加上static修饰,表示仅在一个编译单元中定义。这样编译器就会认为它们是不同的对象,链接器也不会混淆。
3.限定命名空间。例如在不同的编译单元中
//1.cpp
namespace a
{
int* p;
}
//2.cpp
namespace b
{
int* p;
}
a::p和b::p会被明确认为是不同的对象。
----
特别应当注意,不要在头文件中定义非模板全局对象,否则一旦被多个编译单元包含,定义就会超过一次,于是出错。
====
[原创回答团]
因此,不能是全局对象。局部对象的定义域是明确的,在不同的函数中可以有不同的同名同类型局部对象(包括参数)。
解决方法
1.在一个编译单元(例如.cpp文件)中定义全局对象,在另外的编译单元中用extern声明(而不是定义)这个对象,以保持唯一性。
2.每个编译单元都定义对象,前面加上static修饰,表示仅在一个编译单元中定义。这样编译器就会认为它们是不同的对象,链接器也不会混淆。
3.限定命名空间。例如在不同的编译单元中
//1.cpp
namespace a
{
int* p;
}
//2.cpp
namespace b
{
int* p;
}
a::p和b::p会被明确认为是不同的对象。
----
特别应当注意,不要在头文件中定义非模板全局对象,否则一旦被多个编译单元包含,定义就会超过一次,于是出错。
====
[原创回答团]
全部回答
- 1楼网友:煞尾
- 2021-01-31 07:31
可以的,返回结构体指针,比如单链表的初始化函数就是可以这么写的。 struct node *create(int n)
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯