【发布时间】:2012-07-10 01:21:40
【问题描述】:
我正在设计一个将std::vector<int> 作为实例变量的类。我使用的是std::vector,因为我需要在运行时设置它的大小。以下是我的代码的相关部分:
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);
}
当我尝试编译时,我收到以下错误消息:
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
但是,当我将违规行更改为:
vector<int> temp(size,0);
vec = temp;
它现在可以顺利编译,我得到了所需的行为,并且可以访问我的向量
vec[i] // i having been defined as an int yada yada yada
这个解决方法没问题,但我想了解它为什么有效并且第一种方法失败了。提前致谢。
【问题讨论】:
-
new vector返回一个指针而不是一个值,以便您能够将它分配给您的成员变量vec -
我猜你来自 Java 或 C#,如果是这样,我的严肃建议是首先获得一本好的 C++ 入门书籍。
-
请始终通过复制+粘贴方法发布实际代码。您发布的代码不完整
-
Aside:你真的需要
size成员吗?回想一下,向量带有自己的大小,始终可以像这样查询:vec.size()。
标签: c++ constructor new-operator stdvector