class T {
private:
std::vector<T> myVec;
// ...
public:
T();
T(float x, float y);
std::vector<T> getMyVec() { return myVec; }
// ...
};
//在T.cpp中我不以任何方式使用myVec(也不在构造函数中)
//在Tmain.cpp中:
int main() {
T myT;
std::cout << myT.getMyVec().size() << std::endl; // 0
T anotherT(1.1, 2.2);
myT.getMyVec().push_back(anotherT);
std::cout << myT.getMyVec().size() << std::endl; // 0
}
希望我能说清楚(假设我的#include等是正确的):
基本上,我有一个类 T ,其中我有一个名为 myVec 的私有成员字段,其类型为 std :: vector 。我还有一个公共(get-)函数来访问该字段。 主要是我创建了一个T对象,并打印出 myVec.size()。它是零,因为我还没有对矢量做任何事情。我将 anotherT 对象和 push_back()创建到前一个T对象的矢量字段中。 我再次打印出前一个对象的 myVec.size()(我希望此时它是1,因为我已经添加了 anotherT 。但它仍然会返回0作为其大小。为什么会这样?我怎样才能使它“保存”我尝试添加的对象?
答案 0 :(得分:1)
std::vector<T> getMyVec() { return myVec; }
应该是
std::vector<T>& getMyVec() { return myVec; }
否则您会返回您的会员副本。
答案 1 :(得分:0)
您需要返回对私人媒介的引用。
std::vector<T>& getMyVec() { return myVec; }
否则它将返回一份副本。无论你对副本做出什么改变都不会影响你在课堂上的矢量。