2013-10-21 104 views
0

我有一个在c文件中创建C++对象的查询。在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; 

} 
+0

为什么要在C代码中创建C++对象?为什么不在项目中使用C++? –

回答

0

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

+0

嗨编译器是苹果LLVM 5。0是c/C++/Objective的默认编译器 - c/objective C++。我可以使用extern“C”{c api}包含c头文件 – boom

3

它很大程度上取决于你所说的“C文件”。先前的回答假定你的意思是一个带有.c后缀的文件。我在这里假定你的意思是一个应该用C编译器编译的文件。

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

+0

顺便说一下,您的代码无法编译。 'include'应该是'#include',有时候你用'CPlusFIle'而不是'CPlusFile'等。 –

+0

编译器是Apple LLVM 5.0,它是c/C++/Objective-c/C++的默认编译器。我可以使用extern“C”{c api}来包含c头文件 – boom

+0

还有一个很好的源代码:http://www.parashift.com/c++-faq/mixing-c-and-cpp.html(如何混合使用C和C++ )。 –

0

你可以使用这个在C++头文件,请检查是否你会从C或C++代码,它包含:

#ifdef __cplusplus 

的包括iostream等,以及使用class,只提供对于C++代码。

但是,如果你想使用CPlusFile类,它是一个C++类,你只能在C++代码中做到这一点。最好是将您的CFile.c重命名为CFile.cpp

1

首先,它是

#include <iostream> 
#include <string> 

,而不是

include iostream 
include string 

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

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.