У меня есть запрос на создание объекта 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;
}
Это сильно зависит от того, что вы называете "C файлом". Предыдущий ответ предполагал, что вы имели в виду файл с суффиксом.c. Я предполагаю, что вы имеете в виду файл, который должен быть скомпилирован с помощью компилятора C.
Если мое предположение действительно, то ответ прост: вы не можете создавать экземпляры C++ классов в C файле. Однако вы можете использовать статические методы C++ из кода C. Пожалуйста, обратитесь, например, к источнику In C++, каков эффект extern "C"? чтобы посмотреть, как это сделать.
Прежде всего, это
#include <iostream>
#include <string>
и не
include iostream
include string
Во-вторых, если CFile.c скомпилирован как C, то это не сработает. Компилятор C не понимает ключевое слово класса, и вы не можете создать экземпляр класса в C.
iostream
является заголовком C++ и недоступен, если вы компилируете с использованием компилятора C. Вы можете написать C++ код в .c
файле, вам просто нужно использовать правильный компилятор.
Вы можете использовать это в своем C++ файле заголовка, чтобы проверить, будете ли вы включать его из кода C или C++:
#ifdef __cplusplus
iostream
и другие, а также использование class
, доступны только для кода C++.
Но если вы хотите использовать класс CPlusFile
, который является классом C++, вы можете сделать это только в коде C++. Лучше всего переименовать свой CFile.c
в CFile.cpp
.
Да, в 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.
include
должен читать#include
, иногда вы используетеCPlusFIle
вместоCPlusFile
и т. д.