主要工作中的线可以吗?也许其他运营商?一些建议? 我认为这里的操作顺序是问题。是否必须使用b.addA(“P”); b.R( “P”)REF(b.R( “P”)); ?访问班级成员的C++操作顺序
我想将对象的引用添加到其他对象,并在对象之间建立关系,如数据库模型。
#include <iostream>
#include <vector>
#include <string>
class A;
class B;
class A{
std::string _name;
std::vector<A*> _refs;
public:
A(std::string="");
A& ref(A&);
std::string name() const;
};
class B{
std::string _name;
std::vector<A> _as;
public:
B(std::string="");
A& addA(std::string);
A& R(std::string);
};
A::A(std::string nm){
_name=nm;
}
A& A::ref(A &a){
for(int i=0; i<_refs.size(); i++)
if(_refs[i]==&a)
return a;
_refs.push_back(&a);
return a;
}
std::string A::name() const{
return _name;
}
B::B(std::string nm){
_name=nm;
}
A& B::addA(std::string nm){
for(int i=0; i<_as.size(); i++)
if(_as[i].name()==nm)
return _as[i];
_as.push_back(A(nm));
return _as[_as.size()-1];
}
A& B::R(std::string nm){
for(int i=0; i<_as.size(); i++)
if(_as[i].name()==nm)
return _as[i];
throw std::string("invaild A");
}
int main(){
B b;
b.addA("P").ref(b.R("P"));
return 0;
}
(其中包括)我认为这是错误的:'_as。的push_back(A :: A(nm)的);'。也许你的意思是'_as.push_back(A(nm));' –
@MihaiTodor:我认为这很好,因为我想存储在我的A型矢量中,名为_as我的“子对象” –
你不能/不应该直接调用类的构造函数,即使VS2010似乎允许它。纠正这一点后,我仍然在GCC中遇到一个奇怪的错误,但我不知道为什么。 –