免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1736 | 回复: 6
打印 上一主题 下一主题

求助:那位大侠帮我看看!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-31 12:37 |只看该作者 |倒序浏览
我的main.cpp

#include <cstdlib>
#include <iostream>

using namespace std;

class  A{
public:
    A(int t )
{
  a = t;
}
  int getdata()
{
  return a;
}
private:
int a;
};



extern "C"{
        int cfun();
        };

int main(int argc, char *argv[])
{
  int b = 0;
  int c = 0;
   
  A data(5);

  b = data.getdata();
  c = cfun();
  
  cout << b << endl;
  cout << c << endl;
   
    system("PAUSE");
    return EXIT_SUCCESS;
}

我的c文件
#include <stdio.h>
int cfun()
{
    return 4;   
}

在工程中调试说没有定义cfun();

那位老大给解释一下!??谢谢!!

论坛徽章:
0
2 [报告]
发表于 2008-05-31 13:11 |只看该作者
你链接那个.c的目标文件了么

论坛徽章:
0
3 [报告]
发表于 2008-05-31 13:32 |只看该作者

回复 #2 tyc611 的帖子

我 在dev-cpp中建立的一个工程
然后把这两个文件加入的,
编译的时候应该是编译器自动给连接吧以下是提示:
编译器: Default compiler
Building Makefile: "E:\qtpro\uqt\Makefile.win"
Finding dependencies for file: E:\qtpro\uqt\main.cpp
Finding dependencies for file: E:\qtpro\uqt\classt.c
执行  make...
make.exe -f "E:\qtpro\uqt\Makefile.win" all
g++.exe main.o classt.o  -o "classt.exe" -L"lib"  

main.o(.text+0x15a):main.cpp: undefined reference to `cfun'
collect2: ld returned 1 exit status

make.exe: *** [classt.exe] Error 1

执行结束

我就是实验一下,c++中调用c的全局函数能不能行!

论坛徽章:
0
4 [报告]
发表于 2008-05-31 14:22 |只看该作者
好像不能一起编译。。。。
g++ -c main.o main.c
gcc -c classt.0 classt.c
g++ main.o classt.o -o test
就可以

论坛徽章:
0
5 [报告]
发表于 2008-05-31 19:02 |只看该作者
没试过

论坛徽章:
0
6 [报告]
发表于 2008-06-01 16:00 |只看该作者
redhat008

我按你的方法试过了,成功!
可是为什呢!?

我用dev-c++编译器编译时生成的Makefile有如下一段
clean: clean-custom
        ${RM} $(OBJ) $(BIN)

$(BIN): $(OBJ)
        $(CPP) $(LINKOBJ) -o "class.exe" $(LIBS)

class.o: class.cpp
        $(CPP) -c class.cpp -o class.o $(CXXFLAGS)

classc.o: classc.c
        $(CPP) -c classc.c -o classc.o $(CXXFLAGS)

好像就是最后这个出错了!!

于是我把我的c文件整个代码放到
extern "C"
{
    #include <stdio.h>
   int cfun()
    {
       return 4;   
    }
};

通过了!!

正常c调c全局的函数不用显式的生命EXTERN的,
是不是英文c++和c的原因所以要显式声明啊!????

论坛徽章:
0
7 [报告]
发表于 2008-06-01 17:45 |只看该作者
既然你用g++编译.c文件,那么此时cfun是用C++链接方式

extern "C"{
        int cfun();
};
声明的是C链接方式的函数
当然最终链接不到了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP