C++,如何在一个cpp文件里使用另一个cpp文件自定义的对象

已定义一个类的头文件MUSIC.h(里面有类的声明和成员函数的定义)在1.cpp中,定义MUSICm;在2.cpp中,用externMUSICm,为什么总是提示什么已重复... 已定义一个类的头文件MUSIC.h(里面有类的声明和成员函数的定义)
在1.cpp中,定义MUSIC m ;
在2.cpp中,用extern MUSIC m,为什么总是提示什么已重复定义??
(1.cpp中已经#include<MUSIC.h>,2.cpp中没有#include<MUSIC.h>,否则会报错)

而相同的情况,如果
在1.cpp中,定义int a ;
在2.cpp中,声明外部变量extern int a ; 那么编译就可以通过

这是为什么,标准类型的就可以而我们自定义的类用extern MUSIC m ; 就出问题?
求高手解答
展开
 我来答
byzxybd
2012-10-15 · TA获得超过455个赞
知道小有建树答主
回答量:731
采纳率:100%
帮助的人:425万
展开全部
2.cpp中要有#include “MUSIC.h”
MUSIC.h文件中要使用条件编译让其不多次加载

比如:
#ifndef _NUSIC_H_
#define _NUSIC_H_
...
#endif
最后看看m是不是你又定义了一个叫m的其他类型的变量
追问
如果在2.cpp中#include “MUSIC.h”,就会出现错误
fatal error LNK1169: 找到一个或多个多重定义的符号
检查过了,没有另一个全局变量m
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
伊·梵beec
2012-10-15 · TA获得超过2160个赞
知道大有可为答主
回答量:1897
采纳率:0%
帮助的人:1380万
展开全部
不知道楼主的music.h中是否有
#ifndef _NUSIC_H_
#define _NUSIC_H_
...
#endif
或者

#pragma once

这样的预编译指令?

2.cpp中肯定是要#include "music.h"的,不然extern MUSIC m;中MUSIC就没有定义,会报错
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
intehel
2012-10-15 · TA获得超过1293个赞
知道大有可为答主
回答量:1601
采纳率:100%
帮助的人:1769万
展开全部
MUSIC.h的内容?

extern MUSIC m;
这个用法是没有错误的,不管对于简单变量还是自定义类型都是可以的;是不是有其他名为m的全局变量
更多追问追答
追问
MUSIC.h里面就是对MUSIC类的成员函数的声明和定义啊
没有其他为m的全局变量
之前在1.cpp里编译是通过的,但自从新建个2.cpp并加入extern MUSIC m;后,
就总是说MUSIC是未定义的
追答
MUSIC没有定义跟重复定义是不同的含义
必须#include
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
高级总监
2015-10-15 · 超过10用户采纳过TA的回答
知道答主
回答量:44
采纳率:0%
帮助的人:12.9万
展开全部
在这个样例中有使用了另一个textfile.cpp,期中还用到头textfile.h头文件
主cpp头文件
#include "textfile.h" /*这里在同一个目录里面,如果不同目录,详情了解绝对地址和相对地址*/
http://jingyan.baidu.com/article/3c48dd34873509e10be35880.html
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yuxiaojianleon
2012-10-15 · TA获得超过153个赞
知道小有建树答主
回答量:176
采纳率:100%
帮助的人:139万
展开全部
#pragma once
这句加在MUSIC.h开头部分
2.cpp加上#include<MUSIC.h>
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式