создание объекта c ++ в файле c

0

У меня есть запрос на создание объекта 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; 

}
Теги:
xcode

5 ответов

3

Это сильно зависит от того, что вы называете "C файлом". Предыдущий ответ предполагал, что вы имели в виду файл с суффиксом.c. Я предполагаю, что вы имеете в виду файл, который должен быть скомпилирован с помощью компилятора C.

Если мое предположение действительно, то ответ прост: вы не можете создавать экземпляры C++ классов в C файле. Однако вы можете использовать статические методы C++ из кода C. Пожалуйста, обратитесь, например, к источнику In C++, каков эффект extern "C"? чтобы посмотреть, как это сделать.

  • 0
    Кстати, ваш код не может компилироваться. include должен читать #include , иногда вы используете CPlusFIle вместо CPlusFile и т. д.
  • 0
    Привет компилятором является Apple LLVM 5.0, который является компилятором по умолчанию для c / c ++ / Objective - c / Objective C ++. Я могу включить c заголовок, используя extern "C" {c api}
Показать ещё 5 комментариев
1

Прежде всего, это

#include <iostream>
#include <string>

и не

include iostream
include string

Во-вторых, если CFile.c скомпилирован как C, то это не сработает. Компилятор C не понимает ключевое слово класса, и вы не можете создать экземпляр класса в C.

0

iostream является заголовком C++ и недоступен, если вы компилируете с использованием компилятора C. Вы можете написать C++ код в .c файле, вам просто нужно использовать правильный компилятор.

  • 0
    Привет компилятором является Apple LLVM 5.0, который является компилятором по умолчанию для c / c ++ / Objective - c / Objective C ++. Я могу включить c заголовок, используя extern "C" {c api}
0

Вы можете использовать это в своем C++ файле заголовка, чтобы проверить, будете ли вы включать его из кода C или C++:

#ifdef __cplusplus

iostream и другие, а также использование class, доступны только для кода C++.

Но если вы хотите использовать класс CPlusFile, который является классом C++, вы можете сделать это только в коде C++. Лучше всего переименовать свой CFile.c в CFile.cpp.

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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню