鱼C论坛

 找回密码
 立即注册
查看: 4496|回复: 2

C++多文件编译

[复制链接]
发表于 2012-11-1 02:16:27 | 显示全部楼层 |阅读模式
3鱼币
有3个文件, 定义了1个命名空间, 1个类
为什么Cross类的声明和定义都放在nameh.h文件就可以, 分开就不行了????
构建的时候出错了, 弄了好久都不知道是怎么回事...


  1. //main.cpp

  2. #include"namesh.h"
  3. #include<iostream>

  4. int main()
  5. {
  6.     T::out();

  7.     Cross cr;

  8.     return 0;
  9. }

复制代码


  1. //nameh.h

  2. #include<iostream>

  3. namespace T
  4. {
  5.     void out()
  6.     {
  7.         int a = 100;
  8.         std::cout << a << std::endl;
  9.     }
  10. }


  11. class Cross
  12. {
  13. public:
  14.     Cross();
  15.     int a;
  16. };

复制代码


  1. //name.cpp

  2. #include"namesh.h"
  3. #include<iostream>

  4. Cross::Cross()
  5. {
  6.     a = 56;
  7.     std::cout << a << std::endl;
  8. }

复制代码



补充内容 (2012-11-1 02:21):
main.obj   ||   error LNK2005: "void __cdecl T::out(void)" (?out@T@@YAXXZ) 已经在 names.obj 中定义
bin\Debug\hello.exe   ||   fatal error LNK1169: 找到一个或多个多重定义的符号

最佳答案

查看完整内容

因为你把T:out放在.h中定义了,然后names.cpp和main.cpp都include了这个文件,于是T:out的定义有了两份拷贝,然后就杯具了。。。 补充内容 (2012-11-1 19:07): 这表情出得太喜感了。。。。T : out....
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-11-1 02:16:28 | 显示全部楼层
因为你把T:out放在.h中定义了,然后names.cpp和main.cpp都include了这个文件,于是T:out的定义有了两份拷贝,然后就杯具了。。。

补充内容 (2012-11-1 19:07):
这表情出得太喜感了。。。。T   :   out....
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-11-2 00:38:50 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-16 02:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表