Tôi đang thiết kế một lớp có một biến thể hiện std::vector<int>
. Tôi đang sử dụng std::vector
vì tôi cần đặt kích thước của nó khi chạy. Dưới đây là các phần có liên quan của mã của tôi:Thiết lập std :: vector trong hàm tạo lớp
my_class.h:
#include <vector>
using std::vector;
class MyClass {
int size;
vector<int> vec;
}
my_class.cc:
#include "my_class.h"
using std::vector
MyClass::MyClass(int m_size) : size(m_size) {
vec = new vector<int>(size,0);
}
Khi tôi cố gắng biên soạn tôi nhận được các thông báo lỗi:
g++ -c -Wall my_class.cc -o my_class.o
my_class.cc: In constructor ‘MyClass::MyClass(int):
my_class.cc:4 error: no match for ‘operator=’ in ‘((MyClass*)this)->My_Class::vec = ((*(const allocator_type*)(& std::allocator<int>())), (operator new(24u), (<statement>, ((std::vector<int>*)<anonymous>))))’
make: *** [my_class.o] Error 1
Tuy nhiên, khi tôi thay đổi dòng vi phạm đến:
vector<int> temp(size,0);
vec = temp;
Hiện tại, công cụ biên dịch không có sự cố và tôi nhận được hành vi mong muốn và có thể truy cập vào vectơ của tôi dưới dạng
vec[i] // i having been defined as an int yada yada yada
Cách giải quyết này không sao, nhưng tôi muốn hiểu tại sao nó hoạt động và phương pháp đầu tiên không thành công. Cảm ơn trước.
'vector' mới trả về một con trỏ không phải là một giá trị, cho bạn để có thể gán nó vào biến thành viên của bạn 'vec' – Chethan
tôi đoán là bạn đến từ Java hoặc C# và nếu như vậy, lời khuyên của tôi là nghiêm trọng để có được một cuốn C++ giới thiệu tốt, đầu tiên. –
Và vui lòng luôn đăng mã thực tế qua phương thức sao chép + dán. Mã bạn đăng không đầy đủ –