在 C 文件中创建 C++ 对象
creating c++ object in c file
我有一个在c文件中创建c ++对象的查询。
我有下面的示例代码。尝试导入CPlusHeader时,它会抛出一个我无法理解的错误。
错误是iostream的文件未找到作为错误之一。我该如何解决此问题。
问候列宁
CPlusFile.h
include iostream
include string
using namespace std;
class CPlusFile {
int data;
public:
CPlusFile();
int getData();
};
CPlusFile.cpp
CPlusFIle::CPlusFIle() {
data = 10;
}
int CPlusFile::getData() {
return data;
}
CFile.h
int doSomething();
CFile.c
include "CFile.h"
include "CPlusFile.h"
int doSomething() {
CPlusFile object;
}
这在很大程度上取决于您所说的"C 文件"。以前的答案假设您指的是带有 .c 后缀的文件。我假设你在这里的意思是一个应该用 C 编译器编译的文件。
如果我的假设是有效的,那么答案很简单:你不能在 C 文件中实例化C++类。但是,您可以做的是从 C 代码调用C++静态方法。例如,请参考 在C++来源中,外部"C"的效果是什么?看看如何做到这一点。
首先,它是
#include <iostream>
#include <string>
而不是
include iostream
include string
其次,如果CFile.c被编译为C,那么这将不起作用。C 编译器无法理解 class 关键字,并且您无法在 C 中创建类的实例。
iostream
是一个C++标头,如果使用 C 编译器进行编译,则不可用。您可以在.c
文件中编写C++代码,只需要使用正确的编译器即可。
您可以在
C++头文件中使用它来检查是否要从 C 或 C++ 代码中包含它:
#ifdef __cplusplus
包含iostream
和其他以及使用class
,仅适用于C++代码。
但是,如果要使用 CPlusFile
类(这是一个C++类),则只能在C++代码中执行此操作。最好是将您的CFile.c
重命名为 CFile.cpp
.
是的,可以在 C 文件中调用C++对象。在这里,我执行了一个场景,
它对我来说工作正常。
CPlusFile.h
#include<iostream>
#include<string>
using namespace std;
class cplus{
int data;
public:
cplus();
int getdata();
};
CPlusFile.cpp
#include "cplusfile.h"
cplus::cplus(){ data =10; }
int cplus::getdata(){ return data; }
CFile.h
#include "cplusfile.h"
#include<stdio.h>
int dosomething();
CFile.c
#include "cfile.h"
int dosomething(){
cplus c;
printf("%d",c.getdata());
}
int main() {
dosomething();
return 0;
}
And compile this by g++ CFile.c CPlusFile.cpp and it works fine.
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 使用std::函数映射对象方法
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 构造对象的歧义
- 使用"std::unordereded_map"映射到"std::list"对象