CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

菜青虫求助:奇怪的问题

楼主link98091(方正)2006-12-01 22:17:52 在 C/C++ / C++ 语言 提问

在unix环境下编译。  
   
  a目录和b目录,  
  a目录的程序:a.cpp   a.h  
  b目录的程序:b.cpp   b.h  
   
  我在b.cpp里想调用   a定义的PManager类的genPInvoice(int)   方法。  
   
  于是在b.cpp里include   "../a/a.h"    
   
  然后因为PManager定义在与b不同的namespace,  
  所以,在b.cpp开头include语句下接着using   PManager所在的名字空间  
   
  调用方法前创建对象PManager   oPManager;  
   
  然后是oPManager.genPInvoice(count);//int   count;  
   
  然后欢快地键入   make    
   
  接着就出现了下面的编译问题:  
   
  -----------------------------------------------------------------  
  Undefined                                               first   referenced  
    symbol                                                           in   file  
  int   thePT::PManager::genPInvoice(int)   PInvoiceApp.o  
  ld:   fatal:   Symbol   referencing   errors.   No   output   written   to   PInvoiceApp  
  ------------------------------------------------------------------------  
   
  我把PManager   oPManager;这句改成PManager   *PPManager=new   PManager   ;  
  然后PPManager->genPInvoice(count);//int   count;  
   
  结果是同样的编译问题。  
   
  代码还缺什么没有做?  
  问题点数:30、回复次数:5Top

1 楼link98091(方正)回复于 2006-12-01 22:50:04 得分 0

我在网上查了一下都是这个最多:  
  ================================================================================  
                    找不到指定的符号,而这些符号,如MAPI_trace又明明是在某个文件中定义过的,  
  这时可能的原因是在使用c及c++写程序时没有注意后缀名的使用,c语言的后缀名一般为.c  
  而c++的后缀名很多如.C   .cpp等,如果使用c++编程,但又用的是.c的后缀名,仅管你使用  
  g++来编译(没有指定言),g++对程序中的函数名等处理时仍按c语言的规则来处理,而不  
  是按c++的名称规则来处理,但是在调用该函数的其它c++文件中,你又使用了.C为后缀名,  
  那么就可能出现以上错误。  
                  总之一句话,后缀名不要乱用。  
  ================================================================================  
  我没有.C的文件,都是.cpp   和.hTop

2 楼whatsouta(某疯子)回复于 2006-12-02 05:18:54 得分 0

懒得看你的描述,贴代码Top

3 楼jixingzhong(瞌睡虫·星辰)回复于 2006-12-02 10:01:04 得分 10

make   的时候,   a.o     有没有链接进来?Top

4 楼jixingzhong(瞌睡虫·星辰)回复于 2006-12-02 10:02:05 得分 0

OBJS   =   ???.o   a.oTop

5 楼OOPhaisky(异化$渴望成功~~)回复于 2006-12-02 12:27:39 得分 20

于是在b.cpp里include   "../a/a.h"    
  -------------------------------------------------------------------------------  
  这仅仅是包括了PManager类的相关声明,而声明只对编译器有用,链接器则要看到具体的定义。  
  也就是说,楼主可以先将b中的b.cpp编译成目标文件b.o,然后在编译a目录中的程序时,使用相应的命令行选项将../b/b.o链接进来。  
  当然了,如果楼主可以做一个makefile,那就更方便了。Top

相关问题

关键词

得分解答快速导航

  • 帖主:link98091
  • jixingzhong
  • OOPhaisky

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo