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

时间:2013-10-21 09:13:35

标签: c++ c xcode

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

}

5 个答案:

答案 0 :(得分:3)

这在很大程度上取决于你所谓的“C档案”。以前的答案假设您的意思是带有.c后缀的文件。我在这里假设你的意思是一个应该用C编译器编译的文件。

如果我的假设有效,那么答案很简单:你不能在C文件中实例化C ++类。但是,你可以做的是从C代码调用C ++静态方法。例如,请参考In C++ source, what is the effect of extern "C"?以了解如何执行此操作。

答案 1 :(得分:1)

首先,它是

#include <iostream>
#include <string>

而不是

include iostream
include string

其次,如果CFile.c被编译为C,那么这将不起作用。 C编译器不会理解class关键字,也无法在C中创建类的实例。

答案 2 :(得分:0)

iostream是一个C ++标头,如果您使用C编译器进行编译,则不可用。您可以在.c文件中编写C ++代码,只需使用正确的编译器即可。

答案 3 :(得分:0)

您可以在C ++头文件中使用它来检查您是否要从C或C ++代码中包含它:

#ifdef __cplusplus

包含iostream和其他内容以及使用class仅适用于C ++代码。

但是如果你想使用CPlusFile类,这是一个C ++类,你只能用C ++代码来实现。最好将CFile.c重命名为CFile.cpp

答案 4 :(得分:0)

是的,可以在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.