我有一个在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 :(得分:3)
这在很大程度上取决于你所谓的“C档案”。以前的答案假设您的意思是带有.c后缀的文件。我在这里假设你的意思是一个应该用C编译器编译的文件。
如果我的假设有效,那么答案很简单:你不能在C文件中实例化C ++类。但是,你可以做的是从C代码调用C ++静态方法。例如,请参考In C++ source, what is the effect of extern "C"?以了解如何执行此操作。
答案 1 :(得分:1)
首先,它是
#include <iostream>
#include <string>
而不是
include iostream
include string
其次,如果CFile.c被编译为C,那么这将不起作用。 C编译器不会理解class关键字,也无法在C中创建类的实例。
答案 2 :(得分:0)
iostream
是一个C ++标头,如果您使用C编译器进行编译,则不可用。您可以在.c
文件中编写C ++代码,只需使用正确的编译器即可。
答案 3 :(得分:0)
您可以在C ++头文件中使用它来检查您是否要从C或C ++代码中包含它:
#ifdef __cplusplus
包含iostream
和其他内容以及使用class
仅适用于C ++代码。
但是如果你想使用CPlusFile
类,这是一个C ++类,你只能用C ++代码来实现。最好将CFile.c
重命名为CFile.cpp
。
答案 4 :(得分: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.