使用向量将类属性指向另一个类

时间:2010-05-20 16:19:14

标签: c++ class pointers reference vector

我有一个简单的类,另一个类具有指向第一个类的属性:

#include <iostream>
#include <vector>

using namespace std;

class first{
public:
    int var1;
};

class second{
public:
    first* classvar;
};

然后,我有一个空洞,应该将“classvar”指向“第一”类的预期迭代。

void fill(vector<second>& sec, vector<first>& fir){
    sec[0].classvar = &fir[0];
}

最后是主()。创建并填充“first”类的向量,创建“second”向量,然后运行fill函数。

int main(){

    vector<first> a(1);
    a[0].var1 = 1000;

    vector<second> b(1);

    fill(b, a);

    cout << b[0].classvar.var1 << '\n';

    system("PAUSE");
    return 0;
}

这给了我以下错误:

1>c:\...\main.cpp(29) : error C2228: left of '.var1' must have class/struct/union
1>        type is 'first *'

我无法弄清楚为什么它将“classvar”作为整个向量而不仅仅是单个实例。我应该这样做吗

cout << b[0].classvar[0].var1 << '\n';

它读得很完美。

有人能解决问题吗? 提前致谢

4 个答案:

答案 0 :(得分:0)

cout << b[0].classvar->var1 << '\n';

b[0].classvar是一个指针。您当前的代码应该对该修复有效,但请确保以后不会使指针无效。

答案 1 :(得分:0)

问题是b[0].classvar是一个指针。要通过指针访问类的成员,您必须使用->运算符,而不是.

b[0].classvar[0].var1工作的原因是因为指针的索引运算符[]使其等效于(*(b[0].classvar + 0)).var1。换句话说,它将0添加到指针然后取消引用它,这样您就可以使用点运算符访问它。

答案 2 :(得分:0)

b[0].classvar->var1

答案 3 :(得分:0)

cout << b[0].classvar.var1 << '\n';

应该是

cout << b[0].classvar->var1 << '\n';

因为second的classvar是指向第一个的指针。

b[0].classvar[0].var1

由于指针的等效性而起作用C&amp;中的数组C ++。