C++에 대한 자체 목록을 만들려고했습니다. 나는이 수업이 : 나는 int로 잘 작동 주에서 사용하려고하면내 클래스의 C++ 런타임 오류
template <class T>
class List
{
private:
T *value, *valueHelper;
int valueSize;
public:
int size;
List()
{
valueSize = 2;
value = (T*)malloc(sizeof(T) * valueSize);
size = 0;
}
void Add(T val)
{
size++;
if (size > valueSize)
{
valueSize *= 2;
valueHelper = (T*)malloc(sizeof(T) * valueSize);
memcpy(valueHelper, value, sizeof(T) * (valueSize/2));
free(value);
value = valueHelper;;
}
value[size - 1] = val;
}
T operator[](int P)
{
return value[P];
}
};
합니다. 는 구매가 문제를하고있다 구조체하기 :
value[size - 1] = val;
이유 :
struct Material
{
string materialName;
int faceNum;
int meshNum;
Material(): materialName(""), faceNum(0), meshNum(0){};
};
void main()
{
List <Material> myList = List<Material>();
myList.Add(Material());
}
내가 줄에 클래스의 런타임 오류가있어? ,
- you cannot use memcpy to move class memory from one place to another except in very few cases. a std::string is not one of these cases.
- When you call an operator= it needs that the receiver is well formed, and it means that it is construct.
당신은 당신이 연산자 =를 호출 할 때 값이 [0] 구성하지 않기 때문에,이 쓰레기로 가득, 두 번째 오류 충돌 :
시작을 원하는()'/'()'이 전체 것이나 사용 '운영자 new' /에서'연산자] [무료 삭제 '. – WhozCraig
새롭고 삭제가 더 좋은 이유는 무엇입니까? – user2320928
@ user2320928이 사람이 C++이기 때문에 – billz