0
在類構造函數中,我正在初始化其他對象並將這些對象推送到我的類向量成員中。據我所知,vector創建了一個對象的副本並將其存儲起來,以便它不會超出範圍。但是,在驗證另一個類函數中的對象時,它們不會再被初始化。下面是一個示例代碼來解釋行爲:無法將類構造函數中新創建的對象複製到其在C++中的向量成員中
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
class Square {
private:
int size_ = 0;
int colour_ = 0;
public:
Square(){
size_ = 0;
colour_ = 0;
}
void init(int size, int colour) {
size_ = size;
colour_ = colour;
}
int get_size() { return size_; }
};
class SetSquares {
private:
std::vector<Square> squares_;
int number_;
public:
SetSquares(): number_(0) {}
void init(int num) {
number_ = num;
squares_.clear();
squares_.resize(num);
for (int i=0; i < num; i++) {
Square square;
square.init(i, i);
squares_.push_back(square);
}
}
void sample(int i) {
if (i >= number_) { return; }
std::cout << "Square size is: " << squares_[i].get_size() << std::endl;
}
};
int main()
{
SetSquares set_of_squares;
set_of_squares.init(7);
set_of_squares.sample(4);
return 0;
}
而不是'squares_.push_back(square)'做'squares_ [i] = square;' – 0x499602D2
resize行是問題,正如Tomek所述。刪除該行,並保持push_back的工作。謝謝! –