主要工作中的線可以嗎?也許其他運營商?一些建議? 我認爲這裏的操作順序是問題。是否必須使用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中遇到一個奇怪的錯誤,但我不知道爲什麼。 –