2013-10-21 135 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.