我有两个班级A
和B
。在A
中,我有一些成员和一些方法,例如
标头文件:
A.hpp:
class A {
public:
A(int i);
virtual ~A();
int j;
Eigen::Vector3d e;
void printE();
}
B.hpp:
class B
{
public:
B(A* A_ptr);
virtual ~B();
void doSomething();
private:
A * object;
};
源文件:
A.cpp:
#include <iostream>
#include "A.hpp"
using namespace Eigen;
using namespace std;
A::A(int i)
{
j = i;
}
A::~A()
{
}
A::printE()
{
cout<<"e = ("<<this->e(0)<<","<<this->e(1)<<","<<this->e(2)<<")"<<endl;
}
B.cpp:
#include <iostream>
#include "A.hpp"
#include "B.hpp"
using namespace Eigen;
using namespace std;
B::B(const A * A_ptr)
{
object = A_ptr;
}
B::~B()
{
}
B::doSomething()
{
int a = 2*object->j+object->e(1); // very stupid and simple example
}
}
在课程B
中,我想访问成员以及A
实例的方法,而不复制任何内容。我考虑将指向A
的实例的指针传递给B
的构造函数,并访问所需的成员和方法。
上面的代码只是我问题的抽象,但我希望你明白我的观点。
我的代码编译得很好(我使用Eclipse Luna),除非我尝试创建类B
的实例
#include "A.hpp"
#include "B.hpp"
using namespace Eigen;
using namespace std;
int main(int argc, char **argv)
{
A A_instance(n);
A* A_ptr;
A_ptr = &A_instance;
B B_instance(A_ptr); // commenting this line, the code compiles fine
return 0;
}
编译此代码时,Eclipse会输出以下错误:
Errors (3 items)
make: *** [all] Error 2
make[1]: *** [some_path.dir/all] Error 2
make[2]: *** [some_other_path] Error 1
,遗憾的是对我没什么帮助。
我的问题是:哪种方法最好?使用朋友类或继承可能更好吗? (注意A
进行B
所需的一些计算,但是否则它们不相关。)或者在{{1}的构造函数中将指针作为参数传递时,我做错了什么}?
答案 0 :(得分:1)
void doSomethingB(A_ptr->a);
这不是有效的成员函数声明,也不是定义。
您可能想写
void doSomethingB() {
A_ptr->a; // what do you want to do with it?
}