【问题标题】:Pointing class property to another class with vectors用向量将类属性指向另一个类
【发布时间】:2010-05-20 16:19:14
【问题描述】:

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

#include <iostream>
#include <vector>

using namespace std;

class first{
public:
    int var1;
};

class second{
public:
    first* classvar;
};

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

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

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

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';

它读起来很完美。

谁能找出问题所在? 提前致谢

【问题讨论】:

    标签: c++ class pointers reference vector


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:
      cout << b[0].classvar->var1 << '\n';
      

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

      【讨论】:

        【解决方案3】:
        b[0].classvar->var1
        

        【讨论】:

          【解决方案4】:

          这个

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

          应该是

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

          因为 second 的 classvar 是指向 first 的指针。

          这个

          b[0].classvar[0].var1
          

          由于 C 和 C++ 中指针和数组的等价性而起作用。

          【讨论】:

            猜你喜欢
            • 2018-09-17
            • 1970-01-01
            • 1970-01-01
            • 2011-05-09
            • 2011-12-13
            • 2013-03-28
            • 2011-03-03
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多