Reputation: 137
I am trying to access C++
function (f1) and string a from c
file using a wrapper function. Code below.
Error thrown is
Error : error: ‘p’ was not declared in this scope double d = f11( p,i);
1.h
double f11(struct c* p, int i);
1.cpp
#include<iostream>
using namespace std;
class c
{
public: double f1(int i) // how can i access from c
{
cout<<"I am in c++";
}
public : string a; // how can i access string from c
};
extern "C" double f11(c* p, int i) // wrapper function
{
return p->f1(i);
}
2.c
#include<stdio.h>
#include "1.h"
int main()
{
int i=9;
double d = f11( p,i);
}
Upvotes: 3
Views: 303
Reputation: 206627
If you manually include the contents of "1.h" in main.cpp, it would look:
#include <stdio.h>
double f11(struct c* p, int i);
int main()
{
int i=9;
double d = f11( p,i);
}
There are several problems there.
You haven't declared p
before using it in the call to f11
.
You don't have any way of constructing an object of type struct c
in main
. Even if you were to fix the compiler errors by providing declarations of struct c
and p
, you'll run into run time problems since the only way to initialize p
will be to initialize it to NULL. That wouldn't do you any good since you have a line
return p->f1(i);
in f11
.
Your declaration and definition of f11
will result in linker error. If you want to implement the function as extern "C"
, you'll also have to declare it as extern "C"
.
extern "C" double f11(c* p, int i);
In 1.cpp, the member function f1
does not return a double. That is cause for undefined error, if the compiler does not report that as an error.
See working code at http://ideone.com/aVFWFJ. Please note that I changed the implementation of c::f1
so it does not crash.
Upvotes: 2