Chinaunix

标题: 求助:那位大侠帮我看看!! [打印本页]

作者: zhq_xue    时间: 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();

那位老大给解释一下!??谢谢!!
作者: tyc611    时间: 2008-05-31 13:11
你链接那个.c的目标文件了么
作者: zhq_xue    时间: 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的全局函数能不能行!
作者: redhat008    时间: 2008-05-31 14:22
好像不能一起编译。。。。
g++ -c main.o main.c
gcc -c classt.0 classt.c
g++ main.o classt.o -o test
就可以
作者: tyz    时间: 2008-05-31 19:02
没试过
作者: zhq_xue    时间: 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的原因所以要显式声明啊!????
作者: tyc611    时间: 2008-06-01 17:45
既然你用g++编译.c文件,那么此时cfun是用C++链接方式

extern "C"{
        int cfun();
};
声明的是C链接方式的函数
当然最终链接不到了




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2