我有一个简单的类,另一个类具有指向第一个类的属性:
#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';
它读得很完美。
有人能解决问题吗? 提前致谢
答案 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 ++。