boom
boom

Reputation: 6166

creating c++ object in c file

I have a query for creating c++ object inside c file.

I have the sample code below. When trying to import the CPlusHeader it throws an error which i could not understand.

The error is iostream' file not found as one of the error. How could i resolve this issue.

Regards, Lenin

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; 

}

Upvotes: 0

Views: 644

Answers (5)

Birendra Kumar
Birendra Kumar

Reputation: 441

Yes, it is possible to call C++ object inside the C file. Here I performed a scenario and
it's working fine for me.

 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.

Upvotes: 0

Werner Henze
Werner Henze

Reputation: 16761

First of all, it is

#include <iostream>
#include <string>

and not

include iostream
include string

Second, if CFile.c is compiled as C, then this will not work. The C compiler will not understand the class keyword and you cannot create an instance of a class in C.

Upvotes: 1

Albert
Albert

Reputation: 68240

You can use this in your C++ header file to check wether you are going to include it from C or C++ code:

#ifdef __cplusplus

The includes iostream and others, as well as using class, are only available for C++ code.

But if you want to use the CPlusFile class, which is a C++ class, you can only do that in C++ code. Best is to rename your CFile.c to CFile.cpp.

Upvotes: 0

Roland Sarrazin
Roland Sarrazin

Reputation: 1345

It strongly depends on what you call a "C file". Previous answer assumed that you meant a file with a .c suffix. I assume here that you mean a file that shall be compiled with a C compiler.

If my assumption is valid, then the answer is simple: You cannot instantiate C++ classes in a C file. What you can do, though, is call C++ static methods from the C code. Please refer, for example, to In C++ source, what is the effect of extern "C"? to see how to do this.

Upvotes: 3

Luchian Grigore
Luchian Grigore

Reputation: 258618

iostream is a C++ header, and isn't available if you're compiling using a C compiler. You can write C++ code in a .c file, you just need to use the right compiler.

Upvotes: 0

Related Questions