我将这些文件放在同一个文件夹中:
function.h
function.cpp
main.c中
如果我有一个像sum(int a){return a+a;}
这样的简单函数(在function.cpp中),我可以编译它,但我需要使用这样的库:
#include "something.hh"
void function(){
ClassX* test;
...
}
问题是,当我试图编译它时,我会得到"未定义的引用"在每个班级。
我该怎么编译呢? 这可能吗?我在某处读过你可以在c中使用c ++函数,而其返回类型及其参数可从C中访问。还有其他要求吗?
我的所作所为:
g++ -c -I /folder/include function.cpp -o function.o
gcc -c main.c -o main.o
gcc main.o function.o -o exec
In function.cpp undefined reference to ClassX
答案 0 :(得分:0)
我认为你的问题不是使用C和C ++,而是包含整个ClassX的文件没有被编译,因此在链接时的第三阶段它会给出错误
gcc main.o function.o -o exec
确保在一个.o文件中定义ClassX,并在上面的步骤中传递该文件。
现在回答你的问题, 你不能编译C ++代码是C编译器,因为C不向前兼容,但C ++向后兼容C,也就是说大多数C代码将由C ++编译器编译而几乎没有变化。但是你可以用c编写一个库或者将c代码编译成.o然后在C ++编译器中使用它来做你需要使用extern“C”链接。
extern "C"
{
....
}
选中此link
由于
答案 1 :(得分:0)
我该怎么编译呢?这可能吗?
通常,有两种可能性:
仅根据函数定义头文件API,使用extern "C"
链接声明这些函数并在C代码中使用它们。
如果您有类声明或其他C ++特定代码,请将您的客户端代码编译为C ++(即将main.c移动到main.cpp)。
在您的情况下,您尝试使用C代码访问C ++类。 这是不可能的。
您仍然可以使用该功能,但您必须创建一个适配层(API声明为extern" C"并且不声明类,模板或其他C ++功能)。
在此适配层中,类或其他C ++构造可以隐藏在对客户端代码不透明的结构中。