在 C 文件中创建 C++ 对象

creating c++ object in c file

本文关键字:C++ 对象 创建 文件      更新时间:2023-10-16

我有一个在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.